2017-01-22 99 views
0

我想做一個301重定向與光速web服務器htaccess沒有運氣。Apache 301重定向與獲取參數

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

例如

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

到:http://www.example.com/some_url

我曾嘗試:

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

任何幫助將不勝感激。

+0

您必須在問題中內聯發佈您的代碼。沒有這些,我們將無法幫助你。那麼,你所做的規則是什麼「沒有運氣」嘗試? – arkascha

+0

我已經添加了我嘗試使用的代碼。 – yaniv14

回答

0

感謝您將您的代碼添加到您的問題。我們再次看到這是多麼重要:

您的問題是,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/所有的URL(所以下面的路徑/)要重寫,還是隻有該確切的URL。如果你想保持請求的任何潛在的進一步的路徑成分,並重寫(例如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樣式文件中這樣的規則。這些文件出了名的錯誤,很難調試,他們真的放慢了服務器。它們僅提供作爲的情況下最後的選擇,你沒有對主機配置控制(讀:真的很便宜的託管服務提供商),或者如果你有依賴於寫自己的重寫規則(這是一個明顯的安全惡夢的應用)。

+0

我認爲'[^ |&] cat = 123 [&| $]'應該是'(?:^ |&)cat = 123(?:&| $)'和'?'(或'QSD'標誌爲Apache> = 2.4)在目的地末端丟失以實際刪除原始查詢字符串(Apache將在此複製舊的查詢字符串)。 – julp

+0

@julp感謝提示! – arkascha