mod_rewrite: нет доступа к реальным файлам и каталогам - PullRequest
1 голос
/ 18 июня 2010

Я использую mod_rewrite / .htaccess для красивых URL-адресов. Я пересылаю все запросы в мой index.php, например:

RewriteRule ^/?([a-zA-Z0-9/-]+)/?$ /index.php [NC,L]

Затем index.php обрабатывает запросы.

Я также использую это условие / правило для устранения конечных слешей (или, скорее, переписываю их в URL без завершающего слеша, с перенаправлением 301; я делаю это, чтобы избежать дублирования содержимого и потому что мне не нравятся конечные слеш лучше):

RewriteCond %{HTTP_HOST} !^\.localhost$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

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

Я решил это, установив для директивы DirectorySlash значение Off:

DirectorySlash Off

Я не знаю, насколько хорошо это решение, я не чувствую себя слишком уверенно в этом.

В любом случае, я хотел бы полностью игнорировать «настоящие» файлы и каталоги, поскольку они мне не нужны, и я в любом случае использую только красивые URL-адреса с «виртуальными» файлами / каталогами. Это позволило бы мне избежать обходного пути DirectorySlash.

Возможно ли это?

Спасибо!

1 Ответ

4 голосов
/ 18 июня 2010

Это потому, что вы также перезаписываете запрос файла и папки.Вы должны добавить новый RewriteCond перед правилом, которое сообщает серверу, что он должен переписывать только несуществующие элементы.

Код:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Надеюсь, это поможет.

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