mod_rewrite .htaccess сопоставляет только файлы, тоже нужно сопоставить каталог - PullRequest
1 голос
/ 14 ноября 2011

Я пытаюсь переписать весь трафик в папку old_site

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+) old_site/$1/$2 [NC,QSA,L]

Работает нормально для

/blog/profile/index.php OR /blog/posts.php

Но почему не совпадает

/blog/login/ or /blog/login

Нужно ли указывать отдельное правило для обработки каталогов с косой чертой и без нее /?

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

Согласно slugonamission я добавил директиву -d

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*) old_site/$1/$2 [NC,QSA,L]

Это работает для / blog / login /, но не для / blog / login, как-то без косой черты, это не рассматривается как каталог?Есть ли способ изменить текущее правило или мне нужно новое, чтобы добавить косую черту?

Ответы [ 3 ]

2 голосов
/ 14 ноября 2011

Ты почти сделал это!Вот что должно работать:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/(.*)/$ old_site/$1/$2 [NC,QSA,L]
RewriteRule ^(.*)/(.*)$ old_site/$1/$2 [NC,QSA,L]

Скажите, пожалуйста, сработало ли

:)

Кстати, вот мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

1 голос
/ 14 ноября 2011

Ты почти у цели! Вам также необходимо обрабатывать каталоги отдельно, что выполняется с условием -d.

0 голосов
/ 14 ноября 2011

С дальнейшими исследованиями следующий шаблон соответствует тому, что мне нужно:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)(/|)$ old_site/$1/$2/ [NC,QSA,L]

/ блог / Профиль / index.php /blog/posts.php

Включая каталоги с косой чертой и без нее:

/ блог / Войти /
/ Блог / Логин

...