apache - httpd-vhosts.conf 中的重定向无法在 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=$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
解决方案
这听起来有点难以置信,但在尝试了所有可能的解决方案之后,我终于尝试删除 .htaccess 中包含重写条件和规则的一堆注释。之后,一切都开始正常工作。
这没有任何意义,因为任何像样的解析器都会做的第一件事就是删除所有注释,但我没有其他解释。(是的,我确保集合中没有杂散的未注释规则。)
现在一切正常,我可以验证 arkascha 的评论是否正确,无论条件和规则在哪里,它们都适用。
推荐阅读
- vue.js - vue-cli4中如何在webpack中设置别名?
- vue.js - 预渲染 Vue?Nuxt.js 或插件,现有网站哪个更好
- python - PyTorch 混淆矩阵图
- php - 使用 Docker 容器部署 Laravel
- firebase - “字符串”类型不是“文件”类型的子类型
- bash - 如何从命令行将 html 模板文件插入 postgresql 字段
- aws-lambda - 无法从“urllib3.connection”导入名称“HTTPException”
- javascript - Jest 测试套件无法使用 await 运行
- java - 检查没有内置方法的字符串的结尾,如 Java 中的 endsWith()
- wpf - 安装在程序文件中的 WPF 应用程序刚刚退出 - 但在另一个文件夹中运行