Как получить URL-адреса к существующим путям И еще один путь с mod_rewrite apache? - PullRequest
2 голосов
/ 02 января 2011

Мой текущий .htaccess выглядит так:

        RewriteEngine On
#       RewriteCond %{REQUEST_URI} !^/_project
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
#       RewriteCond %{REQUEST_FILENAME} !-l
        RewriteRule ^.*$ index.php [QSA,L]

Некомментированные строки довольно просты:

  • Два Cond обеспечивают, что Rule не применяется к существующим файлам (!-f) и папкам (!-d).
  • Rule отправляет все остальное на index.php

Некомментированные строки, которые я взял откуда-то. Я считаю, что это лучший способ сделать то, что мне нужно: «красивые URL».

В основном это работает. Существующие файлы (например, /css/general.css) являются запрашиваемыми, а несуществующие пути (например, /admin/login) направляются в index.php. Существующие и несуществующие пути должны быть в состоянии работать «друг с другом»: /css/all.css иногда представляет собой буферизованный существующий файл CSS, а иногда (когда он не существует) обрабатывается PHP. /css/general.css это всегда файл. /css/club_N.css (N - это число) всегда является сценарием PHP.

/_project/ - это существующая папка с базовой защитой HTTP-аутентификации. Например, /_project/phpinfo.php также работает. В папке _project я создал (действительную) символическую ссылку на папку резервных копий: /_project/backups/. Каким-то образом (существующие) файлы в папке резервных копий не могут быть достигнуты. Например, /_project/backups/today.bz2 перенаправляется на index.php = (То же самое происходит с одной или двумя закомментированными строками.

Что не так с конфигом htaccess? Если я полностью удалю Rewrite, я получу 403 Forbidden. Возможно, что-то с .htaccess в папке _project (?).

PS. Очевидно, я не могу показать вам реальный сайт. Людям не понравится, если вы сможете загрузить их резервные копии =)

1 Ответ

1 голос
/ 02 января 2011

.htaccess файлы имеют иерархическую структуру, все такие файлы в родительских каталогах применяются к их дочерним элементам.

Базовая аутентификация в /_project/ будет применяться к подкаталогам, если вы не отключите ее в этих каталогах, как и объявление RewriteRule. Часто целесообразно добавить RewriteEngine off в .htaccess дочерней структуры каталогов, чтобы прекратить применение там правил, или возможно добавить условную блокировку этой структуры в исходный набор правил.

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