簡體   English   中英

使用get參數重定向Apache 301

[英]Apache 301 redirect with get parameters

我正在嘗試使用lightspeed webserver htaccess進行301重定向而沒有運氣。

我需要做一個url來重定向url而沒有任何相關參數。

例如:

來自: http://www.example.com/?cat=123http://www.example.com/?cat=123

至: http://www.example.com/some_urlhttp://www.example.com/some_url

我努力了:

RewriteRule http://www.example.com/?cat=123 http://www.example.com/some_url/ [R=301,L,NC]

任何幫助將不勝感激。

感謝您將代碼添加到您的問題中。 我們再一次看到它的重要性:

您的問題是RewriteRule 不對 URL進行操作,而是對路徑進行操作。 所以你需要這樣的東西:

RewriteEngine on
RewriteRule ^/?$ /some_url/ [R=301,L,NC,QSD]

根據您的問題,您不清楚是否要忽略任何GET參數,或者如果您只想設置某些參數時需要重定向。 因此,只有在請求中實際設置了某個參數時,才會應用此變體:

RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)cat=123(?:&|$)
RewriteRule ^/?$ /some_url/ [R=301,L,NC,QSD]

另一件事情並沒有真正明確的是,如果您希望重寫http://www.example.com/以下的所有網址(因此在路徑/下方),或者只需要重寫該網址。 如果您想保留請求的任何可能的其他路徑組件並仍然重寫(例如http://www.example.com/foo => http://www.example.com/some_url/foo ),那么您需要在正則表達式中添加捕獲並重用捕獲的路徑組件:

RewriteEngine on
RewriteRule ^/?(.*)$ /some_url/$1 [R=301,L,NC,QSD]

要使其中任何一個工作,您需要通過AllowOverride命令啟用.htaccess樣式文件的解釋。 有關詳細信息,請參閱重寫模塊的官方文檔。 並且您必須注意-htaccess樣式文件實際上是由http服務器進程可讀的,並且它位於本地文件系統中的http主機DOCUMENT_ROOT文件夾中。


一般提示:您應該始終更喜歡將此類規則放在http服務器主機配置中,而不是使用.htaccess樣式文件。 這些文件非常容易出錯,難以調試,它們確實會降低服務器的速度。 它們僅作為最后一個選項提供給您無法控制主機配置的情況(閱讀:非常便宜的托管服務提供商),或者您有一個依賴於編寫自己的重寫規則的應用程序(這是一個明顯的安全噩夢) )。

暫無
暫無

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

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