2016-06-21 2 views
0

Я это Apache Rewrite правила:Append Строка запроса с использованием Htaccess URL перезапись не работает

RewriteCond %{QUERY_STRING} !lang 
RewriteCond %{HTTP_HOST} ^(jp|en|kr|cn)\.example\.com 
RewriteRule ^(.*)$ http://%1.example.com/$1&lang=%1 [L, QSA] 

RewriteCond %{HTTP_HOST} ^(jp|en|kr|cn)\.example\.com 
RewriteRule ^(.*)$ http://%1.example.com/$1?lang=%1 [L, QSA] 

Что я ожидал это

  1. http://en.example.com в http://en.example.com?lang=en
  2. http://en.example.com/list.php в http://en.example.com/list.php?lang=en
  3. http://en.example.com/product.php?id=1 в http://en.example.com/product.php?id=1&lang=en

(1) и (2) это хорошо, но то, что я получил для (3) является

http://en.mobile-wifi_rental.local/product.php&lang=en?id=1.

ответ

1

Вам нужно только одно правило для этого, вот оно:

RewriteEngine on 
RewriteBase/

RewriteCond %{QUERY_STRING} !lang 
RewriteCond %{HTTP_HOST} ^(jp|en|kr|cn)\.example\.com$ 
RewriteRule ^(.*)$ http://%1.example.com/$1?lang=%1 [L,QSA] 

Проблема с первым правилом было использование & вместо ? для строки запроса.

Обобщенный вариант этого будет:

RewriteCond %{QUERY_STRING} !lang 
RewriteCond %{HTTP_HOST} ^([a-z]{2})\.[^\.]+\.[^\.]+$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1?lang=%1 [L,QSA] 
+0

В моей случае, он не должен быть общим. Я могу использовать точные коды стран ('jp | en | kr | cn') и домен (' example.com'). – Sithu

+0

Он пробовал ваше общее правило по адресу http://htaccess.mwl.be/. 'id = 1' не добавляется для' http: //en.example.com/product.php? id = 1'. Результатом является 'http: //en.example.com/product.php? Lang = en'. Я хочу, чтобы это было похоже на http: //en.example.com/product.php? Id = 1 & lang = en' – Sithu

+0

Да, мне нужно только одно правило, и оно работает на реальном реальном сервере, онлайн-тестере http: // htaccess.mwl.be/ работает не так, как ожидалось. – Sithu

1

Я изменил свои правила, %{QUERY_STRING} добавлены вручную:

RewriteCond %{QUERY_STRING} !lang 
RewriteCond %{HTTP_HOST} ^(jp|en|kr|cn)\.example\.com 
RewriteRule ^$ http://%1.example.com/?lang=%1 [L,QSA] 

#Rule for empty query string 
RewriteCond %{QUERY_STRING} ^$ 
RewriteCond %{HTTP_HOST} ^(jp|en|kr|cn)\.example\.com 
RewriteRule ^(.*) http://%1.example.com/$1?lang=%1 [L] 

RewriteCond %{QUERY_STRING} !lang 
RewriteCond %{HTTP_HOST} ^(jp|en|kr|cn)\.example\.com 
RewriteRule ^(.*) http://%1.example.com/$1?%{QUERY_STRING}&lang=%1 [L] 

Испытано шпагатом: http://en.example.com/product.php?id=1 и результат http://en.example.com/product.php?id=1&lang=en

+0

Он почти работает. Я попробовал ваш http://htaccess.mwl.be/ для 'http: // en.example.com/product.php'. Результатом вывода является «http: //en.example.com/product.php? & Lang = en' с дополнительным' & ' – Sithu

+0

. Для этого необходимо и дополнительное правило, чтобы проверить, является ли query_string пустым. –

+0

@Sithu Я добавил дополнительное правило, чтобы проверить, является ли строка запроса пустой. Проверено! –

Смежные вопросы