我在 CentOS 上的 apache 上遇到了一个重写问题。
如果我从 HTTP 加载我的网站,它工作正常。重写规则有效。一旦我将其更改为 HTTPS,重写规则就不起作用了。
经过一些测试和浏览线程后,我意识到如果从 HTTPS 访问网站,apache 就不会拾取 .htaccess 文件。
我所做的测试是在 .htaccess 文件中插入“deny from all”。当我访问http://my.domain.com它显示禁止错误。当我通过访问https://my.domain.com我仍然可以加载该页面,这意味着 .htaccess 未被读取。
我检查了 httpd.conf 和 ssl.conf,并确保已设置 AllowOverride All。还有什么地方是我可能遗漏的吗?
这是我的 httpd.conf 配置:
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/httpd/ssl/my.domain.crt
SSLCertificateKeyFile /etc/httpd/ssl/my.domain.key
SSLCACertificateFile /etc/httpd/ssl/caroot.crt
ServerAdmin [email protected]
ServerName my.domain.com
ServerAlias my.domain.com
DocumentRoot /var/www/my.domain.com/public_html/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/my.domain.com/public_html/>
Options Indexes FollowSymLinks ExecCGI MultiViews
#RewriteEngine on
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/www/my.domain.com/logs/ssl-error.log
CustomLog /var/www/my.domain.com/logs/ssl-access.log combined
</VirtualHost>
下面是我的 .htaccess 文件,位于 /var/www/my.domain.com/public_html/ 中
AddType text/x-component .htc
Options FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>
以下是端口 80 的配置:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName my.domain.com
ServerAlias my.domain.com
DocumentRoot /var/www/my.domain.com/public_html/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/my.domain.com/public_html/>
Options Indexes FollowSymLinks ExecCGI MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/www/my.domain.com/logs/error.log
CustomLog /var/www/my.domain.com/logs/access.log combined
</VirtualHost>
答案1
然后将我的评论变成答案:
是否有其他默认虚拟主机?由于您显示的所有信息似乎都是正确的,我怀疑还有其他因素阻碍了它正常工作。最有可能的是默认配置文件和/或其默认设置。
检查 ssl.conf 中的默认设置,尤其是 ServerName 和 ServerAlias。还有 httpd.conf
答案2
确保您的全局 Apache 配置包含以下行:
AccessFileName .htaccess