我有 2 台 LAMP 服务器,它们都使用相同版本的 Apache,并且都运行 Wordpress。SSL 在两台服务器上都有效(尽管测试服务器使用不同域的证书)。
在两者上我都有以下.htaccess 文件(/var/www/html/.htaccess):
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
测试服务器正确重定向到 HTTPS,但生产服务器根本不尝试重定向。我可以通过 HTTPS 手动浏览生产站点。
.htaccess 文件的权限为 755,且在两台服务器上均归 apache:apache 所有。
为了确保测试站点上的重定向是由于 .htaccess 文件引起的,我通过删除以下内容对其进行了更改:
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
测试站点上的重定向停止了,直到我将其重新添加。
在测试站点上完成的事情是否需要在生产中完成?
答案1
我发现了这个问题,所以我想我抢先提出了这个问题,但我会把它留在这里 - 也许它可以为某人节省一些时间。
在/etc/httpd/conf/httpd.conf
文件中,我已将AllowOverride
文档None
根目录设置为仍在生产站点上。
现在它看起来是这样的(重定向工作正常):
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>