Удаление query_string из перестановки поддомена с подстановочными знаками - PullRequest
0 голосов
/ 16 ноября 2011

Моя цель - указать:

http://xyz.domain.com/abc до http://www.domain.com/dir/file.php?var=xyz

(Другими словами, что-либо с http://_____.domain.com/abc будет читать из http://www.domain.com/dir/file.php?var=_____.)

Я использовал это в своем файле .htaccess в корне сайта (http://www.domain.com/.htaccess):

RewriteCond %{HTTP_HOST} !^www.domain.com [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC]
RewriteRule ^abc/*$ dir/file.php?var=%2 [NC,L]

Работало, но затем автоматически перенаправлялось на http://xyz.domain.com/abc/?var=xyz, когда я просто хотел http://xyz.domain.com/abc без отображения строки запроса.

Я рассмотрел добавление строки %{QUERY_STRING} к приведенному выше, но застрял при попытке сопоставить два var RewriteCond друг с другом.

Тогда я нашел это в http://www.askapache.com/htaccess/modrewrite-tips-tricks.html#Removing_Query_String

RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://www.askapache.com%{REQUEST_URI}? [R=301,L]

... какой, мне кажется, правильный код, чтобы избавиться от чего-то подобного в обычном домене? Я попытался сделать его подходящим для подстановочных доменов, изменив его на следующее:

RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{HTTP_HOST} !^www.domain.com [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com[NC]
RewriteRule .* http://%2.domain.com%{REQUEST_URI}? [R=301,L]

Но это не работает. ТАК ... кто-нибудь может помочь?

1 Ответ

0 голосов
/ 16 ноября 2011

Существует модуль с именем mod_dir, который перенаправляет браузер, когда он думает, что вы пытаетесь получить доступ к каталогу, но отсутствует косая черта.Когда я тестирую на своем apache, это происходит только тогда, когда каталог действительно существует, меня перенаправляют с помощью косой черты, но происходит перезапись, и я вижу строку запроса.Попробуйте принудительно установить внутреннюю косую черту и, переписав в dir / file, явно используйте косую черту:

# Force trailing slash when accessing /abc without one
RewriteRule ^abc$ /abc/ [NC,L]

# these are the same
RewriteCond %{HTTP_HOST} !^www.domain.com [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC]
# Match against a trailing slash
RewriteRule ^abc/$ dir/file.php?var=%2 [NC,L]
...