Apache → Передача GET-параметров при переадресации
Допустим, что два или более сайта обслуживаются одним веб-приложением, но различать их всё же надо. Предположим, что разделение это происходит в файле .htaccess, путём определения параметра city.
1 2 3 4 5 6 7 8 9 | RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^pupersite\.kh\.ua$ [NC]
RewriteRule ^(.*)$ index.php?city=kharkov [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^pupersite\.zp\.ua$ [NC]
RewriteRule ^(.*)$ index.php?city=zaporozhye [L]
|
Проблема здесь в том, что происходит замена GET-параметров в строке запроса, т.е. по ссылке вида pupersite.zp.ua/?param1=1¶m2=3 приложение параметров param1 и param2 не получит.
Естественно, это далеко не единственный метод разделить сайты по доменным именам, можно было реализовать и по другому, но имеем то что имеем, а времени и надобности на переделку проекта нет. Когда я столкнулся с этой проблемой в первый раз, то решения так и не нагуглил, ведь для того, чтобы правильно поставить вопрос, нужно уже частично знать ответ. В те давние времена я был поражён тем фактом, что два сайта с разными доменными именами могут работать на одном экземпляре движка :) Не работали тогда некоторые формы на сайте по описанным выше причинам, я же просто поменял этим глючным формам метод запроса с GET на POST и проблема исчезла.
Однако одними формами дело не ограничивается. Для таких случаев как раз и предназначен флаг QSA. Содержимое .htaccess слегка изменится, а дополнительные GET-параметры будут передаваться дальше.
1 2 3 4 5 6 7 8 9 | RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^pupersite\.kh\.ua$ [NC]
RewriteRule ^(.*)$ index.php?city=kharkov [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^pupersite\.zp\.ua$ [NC]
RewriteRule ^(.*)$ index.php?city=zaporozhye [QSA,L]
|
Этот флаг, т.е. QSA (Query String Append), указывает механизму преобразований на добавление дополнительных данных в новую строку запроса из преобразовываемого запроса. На примере уже мелькавшего здесь URL-а получим:
было - pupersite.zp.ua/?param1=1¶m2=3
стало - index.php?city=zaporozhye¶m1=1¶m2=3
Комментарии
Это не шутка!