提问人:Nour 提问时间:7/6/2023 最后编辑:MrWhiteNour 更新时间:7/8/2023 访问量:56
htcaccess重写规则无法以任何方式工作
htcaccess Rewrite Rule not working in any way
问:
我正在做一个项目,我正在尝试在我网站的根目录中进行 URL 重写。现在的情况如下.htaccess
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteRule ^screenshot-of-the-week/screenshot/([^/]+) /screenshot-of-the-week/screenshot/index.php?id=$1
在我的网站上启用了重写。我已经通过htaccess测试器检查了代码,它显示了正确的值。
然而,当我访问一个例子时,我得到一个 404 页面。当我访问它时,它工作得很好。screenshot-of-the-week/screenshot/123
screenshot-of-the-week/screenshot/
此外,当手动转到“真实”URL 时,它也会按预期工作:screenshot-of-the-week/screenshot/index.php?id=123
我似乎无法弄清楚问题出在哪里,并尝试将其移动到其他文件夹,当然也编辑了路径,但没有成功。.htaccess
任何人都可以提供任何其他故障排除提示吗?如何检查重定向在后台实际执行的操作?
答:
RewriteRule ^screenshot-of-the-week/screenshot/([^/]+) /screenshot-of-the-week/screenshot/index.php?id=$1
此规则的“问题”是也与重写的 URL 匹配(具体来说,匹配),因此第二次重写为(参数被覆盖)。所以,我希望你的脚本生成 404 响应(不是 Apache)?[^/]+
index.php
/screenshot-of-the-week/screenshot/index.php?id=index.php
id=123
要解决此问题,您应该使正则表达式更具体和/或使用标志 (Apache 2.4) 来防止重写引擎进行额外的循环(和第二次重写)。END
在您的示例中,您传递了一个数值 - 因此,如果您只期望一个数值,则仅匹配数字。
例如:
RewriteRule ^screenshot-of-the-week/screenshot/(\d+)$ /screenshot-of-the-week/screenshot/index.php?id=$1 [END]
请注意,我还在正则表达式中包含尾随,否则您的网站可能会被滥用,因为任何内容都可以附加到 URL 中,并且将提供相同的资源。(在原始规则中,追加将导致相同的响应。$
/<anything>
(我假设您的文件位于文档根目录中。.htaccess
我已经通过htaccess测试器检查了代码,它显示了正确的值。
MWL 测试器仅对文件进行一次遍历。这不是真正的Apache服务器的工作方式。因此,MWL 测试仪无法检测重写/重定向循环。
当我访问它时,它工作得很好。
screenshot-of-the-week/screenshot/
当您访问时,则不会处理规则(正则表达式不匹配)。mod_dir提供文档 (),但不带参数。screenshot-of-the-week/screenshot/
DirectoryIndex
index.php
id
评论
AllowOverride