无法使 RewriteCond 规则在 mod_rewrite 中起作用

无法使 RewriteCond 规则在 mod_rewrite 中起作用

我有以下路径:

http://www.domain.com/cgi-bin/hsrun.exe/Distributed/Postphil/postphil.htx;start=DetectLanguage?Language=LANG_Icelandic

如果路径包含文件夹 /postphil 我想重定向到新域

但我无法让 RewriteCond 规则发挥作用

RewriteCond %{REQUEST_URI} ^postphil+ [NC]
RewriteRule ^(.*)$ https://www.newdomain.com/ [R=301,L] 

我一直在使用重写规则测试器尝试找出可行的方法,但没有成功。

关于如何编写 RewriteCond 条件有什么想法吗?

答案1

对于重写规则来说,上下文非常重要。如果您的 RewriteCond 位于文件.htaccess或块内<Directory >,则 URI 上没有前导斜杠。如果它位于 Apache 配置的任何其他部分,则 URI 将以斜杠开头。

原因在于,在目录上下文中,指向该目录的文件路径会被删除,并且该路径始终以斜杠结尾。

在您的情况下,也存在所有这些:/cgi-bin/hsrun.exe/Distributed/在位之前Postphil,但是您需要以 URI 开头,postphil因此 RewriteCond 也不会因为这个原因而匹配。

正则表达式的结尾 ( l+) 表示“一个或多个 l”,这也有点奇怪,但是因为它匹配单个“l”那部分应该可以起作用。

如果你想要的正是你所说的:“如果路径包含文件夹 /postphil 我想重定向到新域”那么这将解决问题,不需要 RewriteCond:

RewriteRule postphil https://www.newdomain.com/ [NC,R,L]

我使用了 302 重定向而不是 301,因为浏览器会缓存 301。即使您更改重定向的目标,如果您的浏览器已经看到该 URL 的 301,它也会直接转到那里。完成测试并满意其正常运行后,您可以将其更改为 301。

答案2

尝试一下并告诉我是否有效:

RewriteCond %{REQUEST_URI} postphil [NC]
RewriteRule (.*) https://www.newdomain.com/$1 [R=301,L] 

请阅读这个:

在 Apache 中重定向、更改 URL 或将 HTTP 重定向到 HTTPS - 您想了解但又不敢问的有关 Mod_Rewrite 规则的一切

相关内容