使用 mod_rewrite 重定向單個頁面
第一個要求是將流量從 重定向
http://www.old-domain.org
到https://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”,因此它們都必須為真。然後第二條規則
/
只匹配頁面,沒有條件。