我有以下路径:
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 规则的一切