.htaccess в подкаталоге «переопределение» родительского htaccess - PullRequest
12 голосов
/ 07 сентября 2011

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

Цель

Переписать все запросы в корневой index.php, если у клиента нет правильного cookie. Если у клиента есть правильный файл cookie, разрешите ему просматривать файлы по своему усмотрению.

Проблема

htaccess в моем подкаталоге имеет преимущество перед моим корневым htaccess, поэтому такие запросы, как www.mydomain.com/subdir/index.php, не перенаправляются.

Мой корень .htaccess

Options FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_COOKIE} !^.*pass.*$ 
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule ^(.*)$ http://www.mydomain.com/index.php?url=$0 [NC]

Мой подкаталог htaccess

RewriteEngine On
RewriteBase /
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

Дополнительная информация

В идеале я пытаюсь создать защищенную паролем область, поэтому все запросы направляются в index.php, где можно ввести пароль и при проверке создать файл cookie, что позволяет бесплатно просматривать содержимое и подкаталоги. Так что, если есть лучший способ сделать это, пожалуйста, дайте мне знать, и я не пошел на .htpasswd, так как мне нужны пользовательские страницы входа в систему, ошибки и заставки.

Кроме того, подкаталог .htaccess является обработчиком URL-адресов ExpressionEngine.

Спасибо.

1 Ответ

23 голосов
/ 08 сентября 2011

Чтобы разрешить выполнение правил перезаписи из родительского .htaccess (htaccess из родительской папки), вам необходимо явно разрешить его (Apache будет рассматривать правила перезаписи в текущем .htaccess как единственное, которое необходимо выполнить, если переписать URL остается в той же подпапке).

Вам необходимо добавить эту строку в ваш .htaccess в подпапке:

RewriteOptions inherit

Руководство по Apache: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions

...