Не могу заставить работать apache mod_rewrites, когда мой сайт находится в подкаталоге public_html

Я использую учетную запись hostmonster для размещения нескольких веб-сайтов. Каждый сайт находится в подкаталоге моей папки public_html, чтобы сохранять меня в здравом уме при администрировании сайтов. Так, например, мой основной домен живет в public_html/joshorndorff.com

Я настроил свой файл.htaccess в своей папке public_html, чтобы перенаправлять трафик в соответствующий подкаталог в соответствии с предложением https://my.hostmonster.com/cgi/help/347

# .htaccess main domain to subdirectory redirect
RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www.)?joshorndorff.com$
RewriteCond %{REQUEST_URI} !^/joshorndorff.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /joshorndorff.com/$1

RewriteCond %{HTTP_HOST} ^(www.)?joshorndorff.com$
RewriteRule ^(/)?$ joshorndorff.com/index.php [L]

Затем в моем подкаталоге я использую.htaccess по умолчанию для drupal, чтобы раскомментировать строки, которые перенаправляют на www. поддомен. Соответствующие строки из подкаталога:

RewriteCond %{HTTP_HOST} ^joshorndorff\.com$ [NC]
RewriteRule ^(.*)$ http://www.joshorndorff.com/$1 [L,R=301]

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

  1. Когда я набираю www.joshorndorff.com/joshorndorff.com/index.php, перезапись не происходит, и имя домена и подкаталог (который называется так же, как имя домена) оба отображаются в адресной строке

  2. Когда я вписываю свой статический IP-адрес (67.20.112.212) в адресную строку, я не перенаправляюсь на свой сайт, а скорее вижу index.html, который я поместил в public_html для целей тестирования /

Я прочитал отличное руководство по mod_rewrite по адресу http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/ но до сих пор не могу решить ни одну из двух проблем. Я хотел бы любые предложения или рабочий код, но еще больше хотелось бы понять, почему RewriteRule ^joshorndorff.com // / [NC]

не делает то, что я ожидаю.

Спасибо! Джош Орндорфф

1 ответ

В приведенных ниже примерах я заменил ваш домен на example.com.

№ 1

То, как вы пишете условие / правило перезаписи, это ожидаемое поведение. Чтобы этого не произошло, вам нужно добавить другой набор условий / правил, который соответствует конкретному подкаталогу и переписывает его. Это должно быть добавлено перед вашим другим правилом в файле Drupal .htaccess в вашем подкаталоге.

В противном случае вы в основном указываете, что оно соответствует имени домена, и передаете все остальное в качестве первой переменной: $1, включая подкаталог.

Вот пример использования example.com/example.com/index.php:

RewriteCond %{HTTP_HOST} ^example\.com\/example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

№ 2

Ваша вторая проблема, просмотр по IP, происходит потому, что ваши правила перезаписи соответствуют только вашему доменному имени.

Если вы хотите перенаправить IP-адрес на доменное имя вашего сайта, вам нужно будет сопоставить хост, в вашем случае IP-адрес, а затем переписать на свой домен:

RewriteCond %{HTTP_HOST} !^(.*)$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

Если вы действительно хотите, чтобы просмотр по IP работал, вы можете сделать что-то вроде этого:

RewriteCond %{HTTP_HOST} !^(.*)$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Обратите внимание, что при адресации # 2 вам придется адаптировать правила, которые я показывал в #1, для использования с IP-адресом и при этом соответствовать подкаталогу. Кроме того, мои примеры не являются точной заменой ваших правил, но должны показывать достаточно, чтобы вы могли легко их адаптировать. Возможно, вы сможете просто добавить свой URI и условия файла в #1, но я специально не тестировал его.

Другие вопросы по тегам