httpd-vhosts.conf 中的重定向无法在 XAMPP 中按预期工作

Posted

技术标签:

【中文标题】httpd-vhosts.conf 中的重定向无法在 XAMPP 中按预期工作【英文标题】:Redirect in httpd-vhosts.conf not working as expected with XAMPP 【发布时间】:2019-06-29 13:27:38 【问题描述】:

使用 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 文件为空或仅包含 cmets,则重定向仍按预期工作。如果 .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 hosts 文件的内容:

127.0.0.1       localhost
127.0.0.1       yoursite.com

【问题讨论】:

我为什么不把重定向放在 .htaccess 中?情况很复杂。我正在尝试为 .htaccess 重写规则集创建一种单元测试。 .htaccess 文件将根据一组输入动态写入,因此它需要独立于重定向。 其实你应该总是希望使用动态配置文件(“.htaccess”),而是在http服务器静态配置文件中实现这样的规则。动态文件使事情变得复杂,由于令人惊讶的副作用而难以调试,它们确实会减慢服务器速度并且会引发巨大的安全问题,尤其是如果 http 服务器进程能够编写它们。跨度> 我真的看不出上面设置的具体问题是什么,但试一试,将重写规则从&lt;Directory&gt; 部分移到全局主机配置中。您需要为此删除 RewriteBase 并使用绝对路径作为重写目标。 同意(关于动态配置),但不是每个人都可以访问 Apache 配置文件。我了解安全问题,但不会也可能永远不会在生产服务器上运行。而且,我已经有一个令人惊讶的副作用。 ;) 问题仍然存在:当 Apache 发现 .htaccess 文件中有一些内容时,它是否忘记了 config 中的重写规则?我在 Apache 文档中找不到任何相关内容。 明确的答案是:不,apache http 服务器不会“忘记”任何规则。但我不明白的是:在您的问题中,您明确声明您确实可以访问服务器配置。 【参考方案1】:

这听起来有点难以置信,但在尝试了所有可能的解决方案之后,我终于尝试删除 .htaccess 中包含重写条件和规则的一堆 cmets。之后,一切都开始正常工作了。

这没有任何意义,因为任何像样的解析器都会做的第一件事就是去掉所有的 cmets,但我没有其他解释。 (是的,我确保集合中没有杂散的未注释规则。)

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

【讨论】:

以上是关于httpd-vhosts.conf 中的重定向无法在 XAMPP 中按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

xampp vhosts - 不需要的重定向到 https

MVC 中的重定向无法按预期工作

无法从 JAVA 中的重定向 url 检索 PayPal 成功/取消付款数据

Wamp环境域名重定向问题

apache中的重定向

XAMPP配置httpd-vhosts.conf后无法启动