第一個要求是將流量從 重定向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/聲稱它有效)
然而,似乎沒有任何效果。沒有發生重定向。我有什麼明顯的誤解嗎?
答案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。
第二條規則/
僅符合頁面,不帶任何條件。