[英]Apache mod_rewrite/mod_redirect: convert URL with query parameters into an SEO-friendly URL. some query parameters are ignored
如上。
最好用一個例子來解釋:
原始網址(參數順序不一致)
如果我訪問上述 3 個示例 URL 中的任何一個,我想重定向到www.myhost.com/my-page/v1/v2
我已經查看/搜索了網絡,但沒有任何東西與我正在嘗試做的事情相提並論。 謝謝你。
您可以使用 mod_rewrite 執行以下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} (?:^|&)p1=([^&]+)
RewriteCond %1@%{QUERY_STRING} ^([^@]+)@(?:|.*&)p2=([^&]*)
RewriteRule ^/?(my-page)$ /$1/%1/%2 [QSD,R=302,L]
第一個條件捕獲p1
的值並將其傳遞給同樣捕獲p2
值的第二個條件。 然后在替換字符串中將它們分別用作%1
和%2
反向引用。
URL 參數可以按任何順序出現。
@
(在第二個條件中)只是一個不會出現在v1
的任意字符,因此在搜索p2
時用作v1
和查詢字符串之間的分隔符。
所有其他 URL 參數(即p3
.. pN
)都將被忽略(並丟棄)。
參數p1
必須存在一個非空值(否則結果重定向將不明確)。 p2
也必須存在,但值可以為空。 例如。 /my-page?p2=&p1=v1
仍然會成功重定向到/my-page/v1/
。
QSD
標志會丟棄請求中的原始查詢字符串。
根據使用這些指令的位置(例如目錄或服務器上下文)以及最終路由 URL 的方式,您可能需要添加初始條件以確保僅處理直接請求(而不是重寫的請求)。
例如,如果需要,添加以下作為第一個條件:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.