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&param2=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&param2=3
стало - index.php?city=zaporozhye&param1=1&param2=3

Комментарии

avatar
Хуторная Елена
avatar
Как все-таки сложно у тебя тут все )))
ответить
avatar
morontt
avatar
Сложных вещей я тут как раз и не пишу, а то, что пишу - это базовые штуки, которые должен знать любой разработчик. Узнаю ещё что-нибудь и сразу сюда накалякаю :-)
ответить
avatar
Хуторная Елена
avatar
Уж если это базовые, то про сложные даже думать страшно )))
ответить
avatar
morontt
avatar
От сложных и у меня волосы дыбом встают :-)
ответить
avatar
Хуторная Елена
avatar
Ну, надо иногда взбодриться )))
ответить
avatar
morontt
avatar
Желательно почаще взбодряться :) Чтобы форму не терять.
ответить
avatar
Хуторная Елена
avatar
Это да )))
ответить
avatar
Светлана Н
avatar
Лучше оцените новую графику в популярнейшей игре http://rpg-online.ga/ .
Это не шутка!
ответить
avatar
aleksqqq
avatar
Спасибооооо! Мучился мучился
ответить
avatar
morontt
avatar
Не за что. Для общего дела и писал :)
ответить
10 комментариев Написать что-нибудь
Или войдите, чтобы не заполнять форму:
Адрес электронной почты нигде не отображается, необходим только для обратной связи.
Напрограммировано на Go 1.23.2, версия движка 7738e0f