适用于 http + https 的 Apache:不需要的重定向

Apache for http + https: Unwanted redirect

我想要一个同时支持 http 和 https 的站点。使用下面粘贴的配置,apache 启动时没有任何错误或警告。该站点是一个wordpress 安装。现在,通过 https 访问服务器可以正常工作。但是,访问端口 80 会发生重定向 - 我不希望这样做,因为它会破坏我的路由。以下是访问日志显示的内容:36.9.152.171 - - [05/Feb/2015:08:16:05 +0100] "GET / HTTP/1.1" 301 586 "-" "curl/7.30.0" - 当我执行 curl http://acme.com 时会发生这种情况。这个 302 是从哪里来的?它可以是 wordpress 吗?我怎样才能摆脱它?

默认站点

<VirtualHost *:80>
    ServerName acme.com
    SSLEngine off
    ServerAdmin info@acme.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    DocumentRoot /var/www/acme  
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/acme>
        Options FollowSymLinks MultiViews
        Satisfy Any
        Allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Require all granted
    </Directory>

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
</VirtualHost>

默认 ssl 站点 服务器名称 acme.com ServerAdmin 信息@acme.com

    DocumentRoot /var/www/acme
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/acme>
        Options FollowSymLinks MultiViews
        Satisfy Any
        Allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

ports.conf

NameVirtualHost *:80
NameVirtualHost *:443

Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

apache.conf

 ### Section 1: Global Environment
 #
 # The directives in this section affect the overall operation of Apache,
 # such as the number of concurrent requests it can handle or where it
 # can find its configuration files.
 #

 #
 # ServerRoot: The top of the directory tree under which the server's
 # configuration, error, and log files are kept.
 #
 # NOTE!  If you intend to place this on an NFS (or otherwise network)
 # mounted filesystem then please read the LockFile documentation (available
 # at <URL:http://httpd.apache.org/docs/2.2/mod/mpm_common.html#lockfile>);
 # you will save yourself a lot of trouble.
 #
 # Do NOT add a slash at the end of the directory path.
 #
 #ServerRoot "/etc/apache2"

 #
 # The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
 #
 LockFile ${APACHE_LOCK_DIR}/accept.lock

 #
 # PidFile: The file in which the server should record its process
 # identification number when it starts.
 # This needs to be set in /etc/apache2/envvars
 #
 PidFile ${APACHE_PID_FILE}

 #
 # Timeout: The number of seconds before receives and sends time out.
 #
 Timeout 300

 #
 # KeepAlive: Whether or not to allow persistent connections (more than
 # one request per connection). Set to "Off" to deactivate.
 #
 KeepAlive On

 #
 # MaxKeepAliveRequests: The maximum number of requests to allow
 # during a persistent connection. Set to 0 to allow an unlimited amount.
 # We recommend you leave this number high, for maximum performance.
 #
 MaxKeepAliveRequests 100

 #
 # KeepAliveTimeout: Number of seconds to wait for the next request from the
 # same client on the same connection.
 #
 KeepAliveTimeout 5

 ##
 ## Server-Pool Size Regulation (MPM specific)
 ## 

 # prefork MPM
 # StartServers: number of server processes to start
 # MinSpareServers: minimum number of server processes which are kept spare
 # MaxSpareServers: maximum number of server processes which are kept spare
 # MaxClients: maximum number of server processes allowed to start
 # MaxRequestsPerChild: maximum number of requests a server process serves
 <IfModule mpm_prefork_module>
     StartServers          5
     MinSpareServers       5
     MaxSpareServers      10
     MaxClients          150
     MaxRequestsPerChild   0
 </IfModule>

 # worker MPM
 # StartServers: initial number of server processes to start
 # MinSpareThreads: minimum number of worker threads which are kept spare
 # MaxSpareThreads: maximum number of worker threads which are kept spare
 # ThreadLimit: ThreadsPerChild can be changed to this maximum value during a
 #              graceful restart. ThreadLimit can only be changed by stopping
 #              and starting Apache.
 # ThreadsPerChild: constant number of worker threads in each server process
 # MaxClients: maximum number of simultaneous client connections
 # MaxRequestsPerChild: maximum number of requests a server process serves
 <IfModule mpm_worker_module>
     StartServers          2
     MinSpareThreads      25
     MaxSpareThreads      75 
     ThreadLimit          64
     ThreadsPerChild      25
     MaxClients          150
     MaxRequestsPerChild   0
 </IfModule>

 # event MPM
 # StartServers: initial number of server processes to start
 # MinSpareThreads: minimum number of worker threads which are kept spare
 # MaxSpareThreads: maximum number of worker threads which are kept spare
 # ThreadsPerChild: constant number of worker threads in each server process
 # MaxClients: maximum number of simultaneous client connections
 # MaxRequestsPerChild: maximum number of requests a server process serves
 <IfModule mpm_event_module>
     StartServers          2
     MinSpareThreads      25
     MaxSpareThreads      75 
     ThreadLimit          64
     ThreadsPerChild      25
     MaxClients          150
     MaxRequestsPerChild   0
 </IfModule>

 # These need to be set in /etc/apache2/envvars
 User ${APACHE_RUN_USER}
 Group ${APACHE_RUN_GROUP}

 #
 # AccessFileName: The name of the file to look for in each directory
 # for additional configuration directives.  See also the AllowOverride
 # directive.
 #

 AccessFileName .htaccess

 #
 # The following lines prevent .htaccess and .htpasswd files from being 
 # viewed by Web clients. 
 #
 <Files ~ "^\.ht">
     Order allow,deny
     Deny from all
     Satisfy all
 </Files>

 #
 # DefaultType is the default MIME type the server will use for a document
 # if it cannot otherwise determine one, such as from filename extensions.
 # If your server contains mostly text or HTML documents, "text/plain" is
 # a good value.  If most of your content is binary, such as applications
 # or images, you may want to use "application/octet-stream" instead to
 # keep browsers from trying to display binary files as though they are
 # text.
 #
 # It is also possible to omit any default MIME type and let the
 # client's browser guess an appropriate action instead. Typically the
 # browser will decide based on the file's extension then. In cases
 # where no good assumption can be made, letting the default MIME type
 # unset is suggested  instead of forcing the browser to accept
 # incorrect  metadata.
 #
 DefaultType None


 #
 # HostnameLookups: Log the names of clients or just their IP addresses
 # e.g., www.apache.org (on) or 204.62.129.132 (off).
 # The default is off because it'd be overall better for the net if people
 # had to knowingly turn this feature on, since enabling it means that
 # each client request will result in AT LEAST one lookup request to the
 # nameserver.
 #
 HostnameLookups Off

 # ErrorLog: The location of the error log file.
 # If you do not specify an ErrorLog directive within a <VirtualHost>
 # container, error messages relating to that virtual host will be
 # logged here.  If you *do* define an error logfile for a <VirtualHost>
 # container, that host's errors will be logged there and not here.
 #
 ErrorLog ${APACHE_LOG_DIR}/error.log

 #
 # LogLevel: Control the number of messages logged to the error_log.
 # Possible values include: debug, info, notice, warn, error, crit,
 # alert, emerg.
 #
 LogLevel warn

 # Include module configuration:
 Include mods-enabled/*.load
 Include mods-enabled/*.conf

 # Include all the user configurations:
 Include httpd.conf

 # Include ports listing
 Include ports.conf

 #
 # The following directives define some format nicknames for use with
 # a CustomLog directive (see below).
 # If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
 #
 LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
 LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
 LogFormat "%h %l %u %t \"%r\" %>s %O" common
 LogFormat "%{Referer}i -> %U" referer
 LogFormat "%{User-agent}i" agent

 # Include of directories ignores editors' and dpkg's backup files,
 # see README.Debian for details.

 # Include generic snippets of statements
 Include conf.d/

 # Include the virtual host configurations:
 Include sites-enabled/

httpd.conf(空)

/var/www/acme/.htaccess

# BEGIN WordPress
# END WordPress

(我的 .htaccess 里没有别的)

看来302确实来自wordpress。我通过 Web 界面将其更改为使用 https://acme.com 作为站点 URL,因为在尝试通过 https 访问站点时出现资源未加载的一些错误,站点 URL 仍然存在在 WP 中设置为 http。通过将 define('WP_HOME','http://web.protogrid.com'); define('WP_SITEURL','http://web.protogrid.com'); 添加到 wp-config.php 将其强制返回 http 后,它再次工作。

我只是讨厌 WP 重写 URLs 的方式 - 为什么还要在 CMS 中这样做?我希望一个好的 CMS 只使用相对 URLs,这样我就可以在不进行数据迁移的情况下移动它。好吧...

我对此的看法:如果您使用 https,则 WP 仅适用于 https。为了实现这一点,我首先必须将它从我的动态反向代理 (hipache) 中移出并再次使用静态路由。