簡體   English   中英

重寫URL后如何重定向頁面

[英]How to redirect the page after rewrite the URL

我必須重寫 URL 所以我在 my.htaccess 中使用了下面的代碼,它正在工作

RewriteRule ^products/part/pumps/?$ pumps.php [L,NC]

如果有人試圖訪問 url 鏈接exmple.com/products/part/pumps/那么它會顯示pumps.php數據。

現在我的問題是,如果有人嘗試訪問頁面 example.com/pumps.php 那么我該如何重定向到此鏈接exmple.com/products/part/pumps/

我已經嘗試過,但出現重定向錯誤

Redirect 301  /pumps.php /products/part/pumps/

我有很多頁面,我也必須重定向它們。 在這里分享兩個例子

RewriteRule ^power\.php$ /products/engine/power/ [R=301,L]
RewriteRule ^connecting\.php$ /products/connection/power/connecting/ [R=301,L]

在現有重寫之前使用以下內容:

# External redirect
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^pumps\.php$ /products/part/pumps/ [R=301,L]

(但首先使用 302 重定向進行測試以避免潛在的緩存問題。)

通過檢查REDIRECT_STATUS環境變量是否為“空”,我們可以僅重定向來自用戶的直接請求,而不是稍后重寫的重寫請求。 成功重寫請求后, REDIRECT_STATUS的值為200 (如 200 OK HTTP 狀態)。

RewriteCond (條件)指令必須先於觸發外部重定向的每個RewriteRule指令。

Redirect指令(mod_alias 的一部分,而不是 mod_rewrite)被無條件處理,最終將重定向重寫的請求,從而導致重定向循環。 您需要始終使用 mod_rewrite。


使用END標志而不是RewriteCond (需要 Apache 2.4)

或者,您可以修改現有的重寫以使用END標志(而不是L )來防止重寫引擎循環。 然后可以省略上面提到的RewriteCond指令。 但請注意, END標志僅在 Apache 2.4+ 上可用。

例如:

# External redirects
RewriteRule ^pumps\.php$ /products/part/pumps/ [R=301,L]

# Internal rewrites
RewriteRule ^products/part/pumps/?$ pumps.php [END,NC]

建議在內部重寫之前將所有外部重定向組合在一起。

不幸的是,由於這些重寫的性質各不相同,因此看起來無法進一步減少規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM