我有以下path:
http://www.domain.com/cgi-bin/hsrun.exe/Distributed/Postphil/postphil.htx;start=DetectLanguage?Language=LANG_Icelandic
如果path包含文件夹/ postphil我想redirect到一个新的域
但是我还没有能够使RewriteCond规则起作用
RewriteCond %{REQUEST_URI} ^postphil+ [NC] RewriteRule ^(.*)$ https://www.newdomain.com/ [R=301,L]
我一直在使用rewrite-rule-tester的在线testing人员来尝试找出有效的东西,但没有运气。
任何想法如何写RewriteCond条件?
上下文对重写规则来说可能很重要。 如果您的RewriteCond位于.htaccess文件中或位于<Directory >块中,则URI上不会有前导斜杠。 如果它在Apacheconfiguration的任何其他部分,则URI将以斜线开头。
原因是在一个目录上下文中,导致到目录的文件path被删除,并且该path总是以斜线结束。
在你的情况下,也有所有这些: /cgi-bin/hsrun.exe/Distributed/在Postphil位之前,但是你需要URI以postphil开头,所以RewriteCond也不会因为这个原因而匹配。
正则expression式( l+ )的结尾意味着“一个或多个l”,这也有点奇怪,但是因为它确实匹配了该部分应该工作的单个“l”。
如果你想要的正是你所说的:“如果path包含文件夹/ postphil我想redirect到一个新的域”,那么这将做的伎俩,不需要一个RewriteCond:
RewriteRule postphil https://www.newdomain.com/ [NC,R,L]
我使用了302redirect,而不是301,因为浏览器caching301s。 即使你改变了redirect的目标,如果你的浏览器已经看到这个URL的301,它将直接在那里。 完成testing后,您可以将其更改为301,并且很高兴能够正常工作。
试试这个,告诉我它是否工作:
RewriteCond %{REQUEST_URI} postphil [NC] RewriteRule (.*) https://www.newdomain.com/$1 [R=301,L]
redirect,更改URL或redirectHTTP到HTTPS的Apache – 你想知道的所有关于Mod_Rewrite规则,但不敢问