2013-01-23 42 views
0

所以我一直在努力去擺脫尾隨?在網址上避免SEO重複。基本上我有一個像刪除尾隨時重定向有趣的事情?

www.example.com/some/thing?

,我需要它重定向到

www.example.com/some/thing

我已經在我的htaccess的以下內容:

# Remove trailing ? 
RewriteCond %{REQUEST_METHOD} (GET) [NC] 
RewriteCond %{THE_REQUEST} \?\ HTTP [NC] 
#RewriteRule ([a-zA-Z0-9-/.=&:?]*)\?$ $1 [R=301,L] 
RewriteRule ^(.*)$ $1 [r=301,l] 

我測試了我的正則表達式在第4行使用測試儀,它完全適用於整個網址。 然後我使用htacces來試着查看變量THE_REQUEST返回的內容,並且我注意到我的代碼正在工作,但出現了一些錯誤。這就是我在上面的代碼中rewrite.log得到:

127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (2) init rewrite engine with requested uri /some/thing 
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (3) applying pattern '^(.*)$' to uri '/some/thing' 
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (4) RewriteCond: input='GET' pattern='(GET)' [NC] => matched 
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (4) RewriteCond: input='GET /some/thing? HTTP/1.1' pattern='\?\ HTTP' [NC] => matched 
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (2) rewrite '/some/thing' -> '/some/thing' 
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (2) explicitly forcing redirect with http://www.example.com/some/thing 
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (1) escaping http://www.example.com/some/thing for redirect 
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (1) redirect to http://www.example.com/some/thing? [REDIRECT/301] 

從我瞭解的日誌被正確重定向,但由於某種原因在最後的重寫規則後追加的問號時,它的重定向。 任何想法發生什麼事以及如何解決這個問題?

另外,當我「取消」通過取消註釋第4行和註釋第5行apache不遵循規則,因爲它是針對/ some /字符串進行測試,而不是針對整個url(URI + QUERY)。我如何使用RewriteRule而不是僅僅通過URI來對整個網址進行apache檢查?

注:網址是動態的,所以我不能只是硬編碼重定向。

回答