使用 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”,因此它們都必須為 true。

第二條規則/僅符合頁面,不帶任何條件。

相關內容