XAMPP中的httpd-vhosts.conf中的重定向无法正常工作

时间:2019-02-05 16:49:54

标签: apache .htaccess mod-rewrite vhosts

使用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

1 个答案:

答案 0 :(得分:0)

这听起来有点令人难以置信,但是在尝试了所有可能的解决方案之后,我终于尝试删除.htaccess中的一堆注释,其中包含重写条件和规则。完成此操作后,一切都会按预期进行。

这没有任何意义,因为任何体面的解析器首先要做的就是去除所有注释,但是我没有其他解释。 (是的,我确保集合中没有杂散无注释的规则。)

现在一切正常,我可以验证arkascha的评论是正确的,无论条件和规则在哪里,都可以应用。