Apache-2.4

使用 mod_rewrite 重定向單個頁面

  • September 5, 2018

第一個要求是將流量從 重定向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/聲稱它有效)

但是,似乎沒有任何效果。沒有重定向發生。我有什麼明顯的誤解,嗯?

我相信這會奏效:

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

然後第二條規則/只匹配頁面,沒有條件。

引用自:https://serverfault.com/questions/929287