使用 mod_rewrite 重定向单个页面

使用 mod_rewrite 重定向单个页面

第一个要求是将流量从 重定向http://www.old-domain.orghttps://example.press—— 但只对域的根执行此操作;任何特定页面都应该在旧域上可用。

所以我做了一些研究,并且这个完成了工作:

RedirectMatch "^/$" "https://example.press"

(有趣的是,https://htaccess.madewithlove.be/声称它不起作用......)

然后,下一个请求进来了:也重定向另一个 URL,形式如下:

http://www.old-domain.example/site/index.php?act=news

,但如果请求任何特定的新闻报道则不会被重定向(例如http://www.old-domain.org/site/index.php?act=news&id=12345

Redirect事实证明,这非常具有挑战性。许多文档和文章都提到,使用/RedirectMatch指令无法实现这一点,但使用RewriteCond+指令可以实现RewriteRule这一点,我总结出它应该是这样的:

<IfModule mod_rewrite.c>
          RewriteEngine On
          RewriteCond %{QUERY_STRING} act=news
          RewriteRule ^(.*)$ https://example.press [R=302,L]
</IfModule>

(再次,https://htaccess.madewithlove.be/声称有效)

但是,似乎什么都没起作用。没有发生重定向。我有什么明显的误解吗?

答案1

我相信这会起作用:

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} act=news RewriteCond %{QUERY_STRING} !act=news&id=12345 RewriteRule ^(.*)$ https://example.press/ [R=302,L] RewriteRule ^/$ https://example.press/ [R=302,L] </IfModule>

有两条规则,第一条规则有两个条件。第一条规则的第二个条件使用!运算符来否定匹配act=news&id=12345。第一条规则的条件之间有一个隐含的“AND”,因此它们都需要为真。

第二条规则/仅匹配页面,没有任何条件。

相关内容