我一直坚持在CentOS上重写apache的问题。
如果我从HTTP加载我的网站,它工作正常。 重写规则工作。 一旦我将其更改为HTTPS,重写规则不起作用。
经过一些testing和浏览线程,我意识到,不知何故,如果从HTTPS访问网站的话,apache并没有拿起.htaccess文件。
我做的testing是在.htaccess文件中插入全部拒绝。 当我访问http://my.domain.com它显示Forbidden错误。 当我通过https://my.domain.com访问时,我仍然可以加载页面,这意味着.htaccess不被读取。
我检查了httpd.conf和ssl.conf,并确保AllowOverride All已设置。 还有其他地方我可以错过吗?
这是我的httpd.confconfiguration:
<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的configuration:
<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>
然后把我的评论转换成答案:
有另一个默认的虚拟主机? 正如你所显示的一切似乎是正确的,我怀疑有其他的东西阻止这个工作正常。 最有可能的是,默认的conf文件和/或其默认设置。
检查ssl.conf中的默认设置,尤其是ServerName和ServerAlias。 另外httpd.conf
确保您的全局Apacheconfiguration具有以下行:
AccessFileName .htaccess