2013-07-23 314 views
0

我甚至不確定這是否可能,但由於網站結構發生變化,我們需要進行緊急更改,這可能是ReWriteCond或其他網站更改。手工將會有一個301的網址過多。 (千)。HTACCESS 301重定向

該網站有一個結構,過濾,例如:

http://www.site.com/?brand=123

這可以甚至進一步過濾,因此它可以 site.com/?brand=123 &顏色= 49 &大小= 57等等等等(可能會更長)

不知道大量的代碼,是否可以放置site.com/? *納入變量

和301將這些變量重定向到site.com/all/? *不管過濾時間有多長?

任何幫助將超級讚賞!

回答

0

這實際上使用單個RewriteRule非常簡單(儘管您可以通過添加RewriteCond來限制基於域的重定向)。

RewriteCond %{QUERY_STRING} !^$ 
RewriteCond %{HTTP_HOST} (www\.)?example\.com 
RewriteRule ^$ http://example.com/all/ [QSA,R=301] 

這將做重定向,並應查詢字符串添加到重定向的URL的末尾:

http://www.example.com/?brand=123&color=red 
    => http://example.com/all/?brand=123&color=red 

http://example.com/?brand=123&color=red&size=colin 
    => http://example.com/all/?brand=123&color=red&size=colin 

不過請注意,由於我們匹配一個空路徑(^$在規則),它不會重定向已經在/all任何要求......或任何其他爲此事:

http://example.com/all/?brand=123  : not redirected 
http://example.com/index.php?brand=123 : not redirected 

如果你也想,如果請求重定向編輯URL是一個索引文件(我將使用的index.php作爲一個例子),你會做以下幾點:

RewriteCond %{QUERY_STRING} !^$ 
RewriteCond %{HTTP_HOST} (www\.)?example\.com 
RewriteRule ^(index.php)?$ http://example.com/all/ [QSA,R=301] 

當然,你應該「example.com」替換用自己的域名哪裏你看到它。

編輯:我已經添加了額外的RewriteCond,這意味着只有在URL上傳遞查詢字符串時纔會發生重寫。

+0

我用這個:(WWW \)的RewriteCond%{HTTP_HOST}網站\ .COM 重寫規則?^$ http://www.site.com/all-products [QSA,R = 301],它的工作,但是,我不能轉到主頁,因爲它會將我重定向到site.com/all-products –

+0

啊,所以如果有一個query_string('?brand = 123 ...'部分),你只需要重寫?我已經更新了我的答案。 – icabod

+0

完美的作品。謝謝 –

0

啓用mod_rewrite的,並通過httpd.conf的.htaccess,然後把這個代碼在你.htaccessDOCUMENT_ROOT目錄:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule (?!^all/)^(.*)$ /all/$1 [L,R=301,NC]