htaccess - переписывает запросы на субдомен в папку со строкой запроса - PullRequest
0 голосов
/ 31 августа 2010

Я пытаюсь заставить переписать поддомен, используя файл Apache htaccess, и мне нужна помощь, пожалуйста.

Я пытаюсь получить запросы на http://xyz.example.com внутренне обработанные , как будто пользователь запросил http://example.com/xyz, поэтому пользователь не видит этот URL в своей адресной строке - он видит версию субдомена.

Это немного усложняется тем фактом, что все, что следует за этим также тоже нужно передать, например, если пользователь запрашивает http://xyz.example.com/test/word/?x=123, тогда сервер должен обрабатывать его так, как если бы он посетил http://example.com/xyz/test/word/?x=123.

Сайтработает на платформе Code Igniter, которая также имеет свои собственные правила htaccess, но я думаю, что это переписывание будет выполнено в первую очередь до того, как они начнут действовать.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 03 сентября 2010

Следующий mod_rewrite набор правил должен выполнить необходимое переписывание:

RewriteCond $0 !^(index\.php/)?xyz
RewriteCond %{HTTP_HOST} ^xyz\.
RewriteRule ^.*$ /xyz/$0 [L]

Строка запроса передается автоматически, поскольку мы не изменили ее при перезаписи.

Чтобы CodeIgnitor мог подобрать это изменение, вам нужно будет использовать PATH_INFO в качестве источника информации о маршрутизации. Ваш $config['uri_protocol'] должен быть установлен на PATH_INFO или AUTO, чтобы это было так, и ваш CodeIgnitor RewriteRule должен выглядеть примерно так:

RewriteRule ^.*$ /index.php/$0

Если у вас возникнут проблемы с попыткой использования PATH_INFO, вам нужно будет найти способ заставить CodeIgnitor проанализировать $_SERVER['REDIRECT_URL'] (и добавить флаг L к первому RewriteRule там). Надеюсь, в этом нет необходимости, но если вы не можете заставить его работать, я посмотрю, как вы можете это сделать.

...