2015-05-14 2 views
4

Итак, у меня есть какая-то сумасшедшая странность в mod_rewrites, игнорируемая, когда дочерние каталоги также имеют файл htaccess (независимо от того, имеет ли файл противоречивое правило или нет).Apache mod_rewrite craziness в наследовании

Так пример для перенаправления /index.html из директории в/для канонических целей ...

RewriteCond %{THE_REQUEST} /index\.html [NC] 
RewriteRule ^(.*?)index\.html$ /$1 [L,R=301,NC,NE] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1/index\.html -f [NC] 
RewriteRule ^(.+?)/?$ /$1/[R=301,L] 

Итак ... если это установлено в настройках корневым, то все работает. Но как только дочерний каталог имеет собственный htaccess (даже без противоречивого переписывания), он просто полностью игнорирует.

+1

Я помню, такая проблема в прошлом. Я не могу вспомнить, удалось ли мне решить эту проблему. Один из способов сделать это - обход всех файлов .htaccess и прямое редактирование httpd.conf. – Sumurai8

ответ

2

По умолчанию дочерние файлы htaccess делают неinherit родительские правила.

Вам нужно добавить эту строку в каждом ребенке Htaccess файлы

RewriteOptions Inherit 

или, еще лучше (если вы хотите, родительские правила, которые будут применяться до тех детей)

RewriteOptions InheritBefore 
+1

Пойдем, чтобы дать это, и я отправлю обратно с нашими результатами. Благодаря! – vernonk

+0

Собираясь выбрать «правильный ответ», учитывая его «правильность», но я думаю, что у нас могут быть некоторые посторонние проблемы. Я не забыл вашу помощь, хотя и определенно ее оценил. – vernonk

+0

Добро пожаловать. Не стесняйтесь публиковать еще один вопрос, если вы снова столкнетесь с проблемами –