2010-09-03 3 views
3

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

+0

Почему у вас есть два сайта, размещенные под одним и тем же корневым URL? Самое простое решение - исправить это, чтобы на самом деле у вас было два сайта, а не папка на одном сайте, которую вы считаете отдельным сайтом. –

+1

Можете ли вы разместить свои файлы '.htaccess'? –

ответ

1

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

В то время как вы не можете остановить выполнение .htaccess в http://example.com

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

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

Проблема это вызвано тем, что кто-то отправляется на мой второй сайт, который мы будем называть site2.com, фактически перенаправляет пользователя на www.example.com/site2.com/, даже если пользователь входит на сайт2.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 через хост ...который, вероятно, является лучшим вариантом, если ваш хост может это сделать, мой мог бы/не мог ...