[英]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.