httpd-vhosts.conf 中的重定向未按预期使用 XAMPP
Redirect in httpd-vhosts.conf not working as expected with XAMPP
使用 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= [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
这听起来有点难以置信,但在尝试了所有可能的解决方案后,我终于尝试删除 .htaccess 中包含重写条件和规则的一堆注释。这样做之后,一切都开始正常工作了。
这没有意义,因为任何像样的解析器都会做的第一件事就是删除所有注释,但我没有其他解释。 (是的,我确保集合中没有杂散的未注释规则。)
既然一切正常,我可以验证arkascha的评论是正确的,不管条件和规则在哪里,它们都适用。
使用 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= [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
这听起来有点难以置信,但在尝试了所有可能的解决方案后,我终于尝试删除 .htaccess 中包含重写条件和规则的一堆注释。这样做之后,一切都开始正常工作了。
这没有意义,因为任何像样的解析器都会做的第一件事就是删除所有注释,但我没有其他解释。 (是的,我确保集合中没有杂散的未注释规则。)
既然一切正常,我可以验证arkascha的评论是正确的,不管条件和规则在哪里,它们都适用。