2015-06-15 129 views
2

我有以下URL [1]:mod_rewrite的 - 力重定向到重寫URL

www.domain.com/?search=somequery 

,我想重定向到[2]

www.domain.com/search/somequery 

我用我.htaccess下面的代碼:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^search/(.*)$ /?search=$1 [L] 

上面的代碼很好,因爲服務器同時理解這兩個URL:[1]和[2]。但是我想不通,我怎麼可以強制,如果用戶訪問[1] URL

回答

1

您需要重定向的新規則重定向到[2]網址:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} /(?:index\.php)?\?search=([^\s&]+) [NC] 
RewriteRule^search/%1? [R=302,L,NE] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^search/(.*)$ /?search=$1 [L,QSA] 
+0

重定向302與301 ..我假設你的代碼移動頁面永久? – lolbas

+2

是的,我只保留302用於測試,否則瀏覽器永久緩存301。一旦測試,你應該改變爲301. – anubhava

+0

我做了一些測試,發現我沒有從'www.domain.com/index.php?search = somequery'重定向。我嘗試了'RewriteCond%{THE_REQUEST} /(index.php||)search=([^'s&]+)[NC]',但似乎完全錯誤。如何在url中添加可能發生的'index.php'? – lolbas

3

試試這個

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\ /\?search=([^&\ ]+) 
RewriteRule^search/%1? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^search/(.*)$ /?search=$1 [L]