2016-08-16 102 views
1

我需要重定向mysite.com/all-tags?tag=[tag]至mysite的/ [標籤]重寫子目錄/查詢參數到根/查詢參數

在htaccess的,我有:

RewriteCond %{QUERY_STRING} ^tag=(.*)$ [NC] 
RewriteRule ^/all-tags$ /%1 [NC,L,R=301] 

RewriteEngine敘述上,和現有捲起規則是:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 

這並不正常工作。任何人都有洞察力,這是不正確的?

感謝

回答

1

可以使用example.com/tag/[tag],而不是example.com/[tag]因爲你已經有一個前端控制器index.php處理所有非文件,非目錄:

RewriteEngine On 

RewriteCond %{THE_REQUEST} /all-tags?\?tag=([^\s&]+) [NC] 
RewriteRule^/tag/%1? [R=301,L,NE] 

RewriteRule ^tag/(.+)$ all-tags?tag=$1 [L,QSA] 

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

感謝 - 這工作在生產服務器上,而不是在localhost上(這很好)。一個問題 - 正在使用的標籤是大寫字母,轉換爲像mydomain.com/[Tag]這樣的URI,而不是mydomain.com/[tag])。我知道強制使用小寫字母的一般Apache規則,並且如果需要也可以重構標籤,但強制小寫規則是否可以限制在此規則集? –

+0

將URL轉換爲小寫將需要Aapche配置更改以聲明「RewriteMap」。你有沒有訪問Apache配置文件? – anubhava

+1

我這樣做 - 但認爲在重構可能時讓服務器處理此處理是沒有意義的。感謝你的協助! –