morontt.info

Apache → Передача GET-параметров при переадресации

Допустим, что два или более сайта обслуживаются одним веб-приложением, но различать их всё же надо. Предположим, что разделение это происходит в файле .htaccess, путём определения параметра city.

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-параметры будут передаваться дальше.

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

g-plus-icon
comments powered by Disqus
Учтите, что комментарии добавляются только при включённом JavaScript в браузере. В ином случае информация хоть и не пропадёт бесследно, но будет отправлена в спам и вряд ли хоть кто-нибудь её увидит.
Хуторная Елена
avatar
Как все-таки сложно у тебя тут все )))
Ответить
morontt
avatar
Сложных вещей я тут как раз и не пишу, а то, что пишу - это базовые штуки, которые должен знать любой разработчик. Узнаю ещё что-нибудь и сразу сюда накалякаю :-)
Ответить
Хуторная Елена
avatar
Уж если это базовые, то про сложные даже думать страшно )))
Ответить
morontt
avatar
От сложных и у меня волосы дыбом встают :-)
Ответить
Хуторная Елена
avatar
Ну, надо иногда взбодриться )))
Ответить
morontt
avatar
Желательно почаще взбодряться :) Чтобы форму не терять.
Ответить
Хуторная Елена
avatar
Это да )))
Ответить
Светлана Н
avatar
Лучше оцените новую графику в популярнейшей игре http://rpg-online.ga/ .
Это не шутка!
Ответить
8 комментариев Написать что-нибудь
Поля, помеченные asterisk, обязательны для заполнения.
Адрес электронной почты нигде не отображается, необходим только для обратной связи.
Веб-сайт вводите в формате http://example.org, при желании, конечно.