mod_rewrite не может перенаправить в папку lib

У меня есть rewriterule, который работает для всего, кроме папки lib. Правило

RewriteRule ^/uk(.*) $1

Это один из гораздо более сложных правил, но я отключил все, кроме этого. Правило прекрасно работает для всего, кроме содержимого папки lib:

http://site.local/lib/cookies.js работает, а http://site.local/uk/lib/cookies.js - нет.

Любой другой путь на сайте перенаправляет нормально, например:

http://site.local/uk/course/view.php?id=15 переходит на http://site.local/course/view.php?id=15

  • Другие папки с тремя буквами в названии работают.
  • uk / otherpath / lib работает.
  • В папке lib нет файла htaccess
  • В корне сайта нет файла htaccess (правила указаны в определении виртуального хоста)
  • Проблема возникает в Ubuntu и RedHat (разработка и производство)
  • Эта проблема возникает на другом сайте Moodle на рабочей станции коллег.
  • Разрешения для папки lib идентичны остальной части дерева каталогов

Что мне не хватает?

--- РЕДАКТИРОВАТЬ ---

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 9

Дает мне

127.0.0.1 - - [22/Sep/2011:11:21:57 +0100] [site.local/sid#7f15a0b345d0][rid#7f15a0e1b270/initial] (2) init rewrite engine with requested uri /uk/lib/cookies.js
127.0.0.1 - - [22/Sep/2011:11:21:57 +0100] [site.local/sid#7f15a0b345d0][rid#7f15a0e1b270/initial] (3) applying pattern '^/uk(.*)' to uri '/uk/lib/cookies.js'
127.0.0.1 - - [22/Sep/2011:11:21:57 +0100] [site.local/sid#7f15a0b345d0][rid#7f15a0e1b270/initial] (2) rewrite '/uk/lib/cookies.js' -> '/lib/cookies.js'
127.0.0.1 - - [22/Sep/2011:11:21:57 +0100] [site.local/sid#7f15a0b345d0][rid#7f15a0e1b270/initial] (2) local path result: /lib/cookies.js
127.0.0.1 - - [22/Sep/2011:11:21:57 +0100] [site.local/sid#7f15a0b345d0][rid#7f15a0e1b270/initial] (1) go-ahead with /lib/cookies.js [OK]
127.0.0.1 - - [22/Sep/2011:11:21:57 +0100] [site.local/sid#7f15a0b345d0][rid#7f15a0e232b0/initial] (2) init rewrite engine with requested uri /favicon.ico
127.0.0.1 - - [22/Sep/2011:11:21:57 +0100] [site.local/sid#7f15a0b345d0][rid#7f15a0e232b0/initial] (3) applying pattern '^/uk(.*)' to uri '/favicon.ico'
127.0.0.1 - - [22/Sep/2011:11:21:57 +0100] [site.local/sid#7f15a0b345d0][rid#7f15a0e232b0/initial] (1) pass through /favicon.ico

Так мне кажется, что это должно работать?

1 ответ

Решение

На вопрос ответили по ошибке сервера. Оказывается, существует некоторое пугающее поведение по умолчанию, при котором, если вы пишете правило на виртуальном хосте и не перенаправляете явно путь, начинающийся с%{DOCUMENT_ROOT}, он сначала ищет подходящие пути в корне вашей файловой системы. Я добавил ответ ниже:

После того, как я возился с этим на моей локальной машине, может показаться, что Apache переписывает в / lib в вашей файловой системе, прежде чем проверять каталог document_root / lib.

Вы должны изменить свой переписать на:

RewriteRule ^/uk(.*) %{DOCUMENT_ROOT}$1
Другие вопросы по тегам