Запретить выполнение .htaccess родительской папки - PullRequest
4 голосов
/ 04 сентября 2010

У меня есть два разных сайта в одном домене, например:Первый сайт в корневом каталоге http://example.com/
Второй сайт в подпапке http://example.com/site2/
Каждый сайт имеет свой собственный .htaccessКогда я захожу на второй сайт (http://example.com/site2/), в журнале mod_rewrite, я вижу, что apache пытается выполнить .htaccess первого сайта (http://example.com/).
Итак, вопрос в томчтобы предотвратить это? Спасибо

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions

унаследуют

Это заставляет текущую конфигурацию наследовать конфигурацию родитель. В контексте каждого виртуального сервера это означает, что карты, Условия и правила основного сервера наследуются. В для каждого каталога это означает, что условия и правила Конфигурация родительского каталога .htaccess наследуется.

Rules inherited from the parent scope are applied after rules specified in the child scope.

1 голос
/ 16 апреля 2012

Пока нельзя остановить выполнение .htaccess в http://example.com

Вы МОЖЕТЕ поместить другой .htaccess в http://example.com/site2/, и любое созданное здесь правило, которое переопределяет правила в .htaccess родительской папки, будет выполнено здесь, но не в родительской папке.

Например, недавно у меня был случай, когда я переписывал любую версию моего основного сайта без www, которую мы назовем example.com в ее эквиваленте www: www.example.com

Проблема, которую это вызвало, заключается в том, что любой, кто посещает мой второй сайт, который мы назовем site2.com, фактически перенаправит пользователя на www.example.com/site2.com/, даже если пользователь заходит на site2.com ИЛИ www. site2.com ИЛИ http://www.site2.com в адресной строке своего браузера

Что мне нужно было сделать, это внести изменения в 2 файла .htaccess, сначала в корень http://www.example.com, а затем в отдельный .htaccess, расположенный в http://www.example.com/site2.com/

1) http://www.example.com .htaccess:

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

2) http://www.site2.com (http://www.example.com/site2.com/) .htaccess (также используется версия www site2.com):

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

RewriteCond %{HTTP_HOST} ^site2\.example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com/site2\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.site2\.example\.com$
RewriteRule ^/?$ "http\:\/\/www\.site2\.com\/" [R=301,L]

Не стесняйтесь разорвать моего регулярного выражения, я ни в коем случае не мастер регулярных выражений. Я также понимаю, что это может создать 2 или, возможно, больше дополнительных перенаправлений, но это единственный способ заставить это работать, без переназначения моего DocumentRoot через хост ... что, вероятно, является лучшим вариантом, если ваш хост может это сделать, мой был бы / не мог ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...