2015-01-12 3 views
1

Что у меня в файл .htaccess:Htaccess RewriteRule добавляет Нежелательные параметру ПОЛУЧИТЬ

RewriteEngine on 

# --- Remove index.php from URLs 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteRule .* index.php/$0 [PT,L] 
RewriteRule ^(.*)$ index.php?/$1 [L] 

RewriteRule ^city/([^/]+)/?$ /uk/city/$1 [R=301,L] 

Что мне нравится делать это перенаправление example.com/city/london на example.com/uk/city/london

Странная вещь, что теперь перенаправляет example.com/uk/city/london?city/london так кажется, он добавляет часть, которую ему нужно перенаправить, в качестве параметра get для нового URL-адреса.

Также попробовал Redirect 301 /city/london http://www.example.com/uk/city/london, но это дает тот же результат.

ответ

0

Вы должны держать R=301 (перенаправлять) правил до того внутреннего правила маршрутизации:

RewriteEngine on 

RewriteRule ^city/([^/]+)/?$ /uk/city/$1 [R=301,L] 

# --- Remove index.php from URLs 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteRule .* index.php/$0 [PT,L] 
RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 

очистить Также кэш браузера, чтобы проверить это, чтобы избежать удара старого 301 кэша.

0

Вы можете попробовать что-то вроде этого, если Redirect 301 не работает:

RewriteRule /city/london uk/city/london [L] 

Вот пример с другими определенными правилами .htaccess:

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 
RewriteRule /city/london uk/city/london [L] 

# --- Remove index.php from URLs 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteRule .* index.php/$0 [PT,L] 
RewriteRule ^(.*)$ index.php?/$1 [L]