使用Windows 10和XAMPP,我在httpd-vhosts.conf中具有虚拟主机的重定向:
<VirtualHost *:80>
DocumentRoot c:/xampp/htdocs/yoursite.com
ServerName yoursite.com
<Directory c:/xampp/htdocs/yoursite.com>
AllowOverride All
RewriteEngine on
RewriteBase /
Allow From All
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) capture.php?q=$1 [L,QSA,R=301]
</Directory>
</VirtualHost>
此时,capture.php只是问好并回显URL。直到我创建一个.htaccess文件:yoursite.com/.htaccess,它才能正常工作。如果.htaccess文件为空,或仅包含注释,则重定向仍会按预期工作。如果.htaccess文件包含任何其他内容,甚至是没有任何作用的规则,我都会得到404。这是一个示例:
RewriteCond %{HTTP_HOST} ^nosuchhost
RewriteRule (.*) http://localhost/mysite.com/index.php
此条件将永远不会得到满足,该规则也将永远不会应用,但是它仍然会阻止来自httpd-vhosts.conf文件的重定向并抛出404。
.htaccess文件和httpd-vhosts.conf文件一样都在清晰地读取。
如果Apache在本地.htaccess文件中找到了重写规则,它会丢掉并忘记从httpd-vhosts.conf文件中获得的所有重写规则吗?还是我出了点问题?
这是Windows主机文件的内容:
127.0.0.1 localhost
127.0.0.1 yoursite.com
答案 0 :(得分:0)
这听起来有点令人难以置信,但是在尝试了所有可能的解决方案之后,我终于尝试删除.htaccess中的一堆注释,其中包含重写条件和规则。完成此操作后,一切都会按预期进行。
这没有任何意义,因为任何体面的解析器首先要做的就是去除所有注释,但是我没有其他解释。 (是的,我确保集合中没有杂散无注释的规则。)
现在一切正常,我可以验证arkascha的评论是正确的,无论条件和规则在哪里,都可以应用。