我在Fedora 13上运行LAMP服务器,工作正常。 不过,我刚刚添加一个“.htaccess”文件到我当前站点的docroot文件夹被完全忽略。
我已经尝试了六种不同的testing,包括这一个:
RewriteEngine on RewriteBase / RewriteRule ^.*$ index.php
但图像和所有其他网页加载罚款,而不存在的文件仍然404。我也试过这个:
order deny,allow deny from all
但每页仍然加载正常。 .htaccess文件再次被100%忽略。
我们把我们的虚拟主机logging放在/etc/httpd/conf.d/virtual.conf中。 它看起来像这样:
NameVirtualHost * <VirtualHost *> ServerName intranet DocumentRoot /var/www/default <Directory "/var/www/default"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *> ServerName ourwebsite.com DocumentRoot /var/www/html/ourwebsite.com/docroot <Directory "/var/www/html/ourwebsite.com/docroot"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
还有什么可能导致我们的服务器完全忽略.htaccess
文件?
编辑:
我将.htaccess文件更改为上面,以更好地表明我的更改被忽略。 请注意,我尝试生产服务器上完全相同的.htaccess文件,它工作正常。
编辑2:
好的,我有新的信息! 仅用于testing目的,我通过并暂时将每个“AllowOverride”指令更改为AllowOverride All
。 我发现第一个目录条目似乎压倒了所有其他的:
<Directory /> Options FollowSymLinks AllowOverride None </Directory>
当我将其更改为AllowOverride All
,我的.htaccess文件开始生效。 就像所有其他AllowOverride All
我的configuration文件中的AllowOverride All
指令都被忽略!
是什么赋予了??
难以置信的。 请记住我是如何说这是一个开发服务器? 是啊..以下是我的虚拟主机条目真正的样子:
<VirtualHost *> ServerName dev.ourwebsite.com DocumentRoot /var/www/html/dev.ourwebsite.com/docroot <Directory "/var/www/html/ourwebsite.com/docroot"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
你看到了吗? 那么我没有。 我忘了把我的“目录”条目改为dev.ourwebsite.com,而不是我们的网站.com,这一切都变了。 我只是假定如果目录不存在,Apache会抛出一个错误; 但只适用于DocumentRoot指令。 是基于匹配的 – 意思是如果匹配传入的请求,则应用规则,否则,不关心是否将它告诉AllowOverride在魔法独angular兽上。
让这个教训给所有其他人来看 – 当其他的都失败时,考虑全能的错字。
检查虚拟主机声明之上的“httpd.conf”中是否有其他的“AllowOverride None”。 可能你在docroot中有“AllowOverride None”。
三个猜测:
在行order deny, allow
的逗号后面实际上是否有空格, .htaccess
order deny, allow
在.htaccess
? Apache不喜欢这样。 对F13我来说,我得到了500。
你有一个AccessFileName
指令在任何地方?
如果你使用的是selinux,你有正确的上下文文件( ls -lZ
)吗?