Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Вам следует изменить Rewrite на:

RewriteRule ^/uk(.*) %{DOCUMENT_ROOT}$1