2017-04-06 27 views
0

試圖重定向:的.htaccess具有獨特的網址和查詢字符串重定向

/category/unique-name?foo=123&bar=&abc= 

到:

http://www.example.com/new/page 

大多數我讀過暗示對重定向多個查詢字符串模式的文章頁面。我只是在需要重定向的頁面之後。

我的最新嘗試是這樣的:

 
    RewriteEngine On 
    RewriteCond %{REQUEST_URI} ^/category/unique-name/$ 
    RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
    RewriteRule ^(.*) $ http://www.example.com/new/page? [R=301,L] 

任何幫助,不勝感激!

UPDATE 2017年7月4日

感謝所有的建議。我試過所有的,有些導致了錯誤500,有些沒有效果。我列出這是其下面...

#無變化

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/category/unique-name$ 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule^http://www.example.com/new/page [R=301,L] 

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/category/unique-name$ 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule^http://www.example.com/new/page [R=301,L] 

#ERROR 500

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule ^/?category/unique-name/?$ $ http://www.example.com/new/page? [R=301,L] 

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/category/unique-name/?$ 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule^$ http://www.example.com/new/page [R=301,END,QSD] 

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule ^/?category/unique-name/?$ $ http://www.example.com/new/page [R=301,END,QSD] 
+0

我嘗試了下面的建議,並用我的結果更新了初始文章^^^ – gurtfrobe

+0

「沒有工作」沒有幫助,您將不得不告訴我們更多的細節。 1.請發佈請求的_exact_ URL,以便從您的http服務器訪問日誌文件中獲得結果,2.發佈您在http服務器錯誤日誌文件中收到的條目,以防收到http狀態500. – arkascha

+0

還請指定哪個版本您實際運行的http服務器的名稱。我懷疑這是一個很舊的。 – arkascha

回答

1

嘗試像這樣,

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/category/unique-name$ 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule^http://www.example.com/new/page [R=301,L] 
+0

感謝您的建議,但不幸的是它沒有奏效。 – gurtfrobe

+0

經過一番嘗試,它爲我工作,但我不得不做兩個步驟:1)把代碼放在htaccess的開始; 2)在http://www.example.com/new/page後加上'?',否則查詢字符串會再次被添加到URL中,並且會導致重定向循環 –

0

你的嘗試接近perf等。有一個嘗試與這兩個只是略作修改選項之一:

方法1(舊):

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/category/unique-name/?$ 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule^$ http://www.example.com/new/page? [R=301,L] 

方法2(舊):

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule ^/?category/unique-name/?$ $ http://www.example.com/new/page? [R=301,L] 

如果你操作一個不是過時的apache http服務器版本,你可以實現一個稍微清潔的最終URL:

方法1 (新):

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/category/unique-name/?$ 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule^$ http://www.example.com/new/page [R=301,END,QSD] 

方法2(新):

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ 
RewriteRule ^/?category/unique-name/?$ $ http://www.example.com/new/page [R=301,END,QSD] 

如果這些導致HTTP狀態500(內部服務器錯誤),然後有機會,確實是你的HTTP服務器的版本太舊了,你必須堅持前兩種方法所顯示的工作。


但是看事實,你實現一個外部重定向(R=301)我不知道這是否會工作,真正實現你要實現的目標......

你自己嘗試什麼(上述修改後的版本)使用這些獲取參數外部的乾淨URL來重寫傳入請求。所以他們改變瀏覽器中可見的URL。這是非常好的,:你的設置是否真的能夠處理下一個傳入的請求到/new/page


而且一般提示:你應該總是喜歡將這種規則的HTTP服務器主機的配置裏面,而不是使用動態配置文件(「的.htaccess」)的。這些文件出了名的錯誤,很難調試,他們真的放慢了服務器。它們僅作爲最後一種選擇,用於您無法控制主機配置的情況(閱讀:真正便宜的託管服務提供商),或者您擁有依賴編寫自己的重寫規則的應用程序(這是一個明顯的安全噩夢)。

+0

感謝您的建議,但不幸的是,工作。我已經使用每個選項的結果更新了我的帖子。 – gurtfrobe

相關問題