我有當前的 .htaccess
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/ $ $1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w-] )/([\w-] )/?$ index.php?apar=$1&bpar=$2 [L,QSA]
RewriteRule ^([\w-] )/?$ index.php?apar=$1 [L,QSA]
我想重定向一些頁面,我通常會這樣做,如下所示:
redirect 301 /old-page https://www.domain.co.uk/new-page
但是,這似乎重定向到頁面
https://www.domain.co.uk/new-page?apar=old&bpar=page
我無法讓舊頁面干凈利落地重定向。
uj5u.com熱心網友回復:
RewriteRule并且Redirect屬于不同的 Apache 模塊(分別為 mod_rewrite 和 mod_alias)。因此,它們在請求期間的不同時間獨立運行。盡管配置中指令的明顯順序,mod_rewrite 總是在 mod_alias 之前運行。
出于這個原因,您應該避免混合來自兩個模塊的指令,以避免出現這樣的意外沖突。但是,從您給出的示例中,除非請求是針對/old/page, 而不是/old-page? (對 的請求/old-page將導致重定向到/new-page?apar=old-page。)
由于您已經在使用 mod_rewrite,因此您應該使用 mod_rewrite 代替此重定向,并將其包含在現有指令之前。例如:
RewriteRule ^old-page$ https://www.example.com/new-page [R=301,L]
首先使用 302(臨時)重定向進行測驗以避免潛在的快取問題,您需要在測驗前清除瀏覽器快取,因為這個錯誤的 301(永久)重定向可能已被瀏覽器快取。
在旁邊:
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([\w-] )/([\w-] )/?$ index.php?apar=$1&bpar=$2 [L,QSA] RewriteRule ^([\w-] )/?$ index.php?apar=$1 [L,QSA]
您RewriteCond在第一條規則之前有一個檔案系統檢查(指令),但在第二條規則之前沒有。(檔案系統檢查僅適用于遵循的第一條規則。)
實際上,該RewriteCond指令可能根本不需要,因為它RewriteRule可能無論如何都不會匹配真實檔案。除非你有沒有檔案擴展名的檔案?!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316615.html
下一篇:登錄后重定向到特定網址
