У меня есть два разных сайтов на одном домене, например:
Первый сайт в корневом каталоге http://example.com/
Второй сайт в подкаталоге http://example.com/site2/
Каждый сайт имеет свой собственный .htaccess
Когда я вхожу на второе место (http://example.com/site2/), в журнале mod_rewrite я вижу, что апач пытается выполнить .htaccess первого сайта (http://example.com/).
Итак, вопрос в том, как предотвратить это? Благодаря
Предотвращение выполнения .htaccess родительской папки
ответ
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.
В то время как вы не можете остановить выполнение .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 через хост ...который, вероятно, является лучшим вариантом, если ваш хост может это сделать, мой мог бы/не мог ...
Почему у вас есть два сайта, размещенные под одним и тем же корневым URL? Самое простое решение - исправить это, чтобы на самом деле у вас было два сайта, а не папка на одном сайте, которую вы считаете отдельным сайтом. –
Можете ли вы разместить свои файлы '.htaccess'? –