mod_rewrite: перенаправить в папку с тем же именем, что и домен - PullRequest
2 голосов
/ 27 ноября 2010

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

например: перенаправить www.mydomain.com на "public_html / www.mydomain.com"

Я попробовал это:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST}/.*$
RewriteRule ^(.*)$  /%{HTTP_HOST}/$1 [L]

Но безуспешно.В чем дело?Можно ли даже перенаправить в папку, которая использует «точку» в своем имени?

Спасибо заранее.

1 Ответ

3 голосов
/ 27 ноября 2010

Тестовый шаблон в RewriteCond фактически пытается сопоставить ввод, начинающийся с литерал строка /%{HTTP_HOST}/. Значение переменной %{HTTP_HOST} не раскрывается так, как вы ожидали, поэтому условие всегда будет истинным (сам шаблон никогда не будет совпадать). Вам нужно будет изменить RewriteCond, и есть несколько разных подходов.

Если это единственный перезаписываемый текст, который вы выполняете, вы можете просто проверить, сделали ли вы это еще:

RewriteCond %{ENV:REDIRECT_STATUS} =""

Или, если ресурс не существует до тех пор, пока вы его не перепишите, вы можете проверить это вместо этого:

RewriteCond %{REQUEST_FILENAME} !-f

Наконец, вы можете имитировать ваше исходное состояние, используя обратные ссылки в тестовом шаблоне вместе с символом-разделителем, который не будет отображаться в вашем URL:

RewriteCond /%{HTTP_HOST}/#%{REQUEST_URI} !^([^#]+)#\1

Обратите внимание, что это не гарантирует, что вы сделали перенаправление, но только гарантирует, что в URI запроса будет имя хоста в качестве первого сегмента пути. Тем не менее, как правило, это достаточно хорошо.

...