2015-03-03 5 views
1

Я борюсь с этой проблемой уже пару часов. В принципе у меня есть новая версия моего сайта в.htaccess RewriteRule and RewriteCond

var/www/mynewsite/public 

У меня есть символическая ссылка в моем WWW/папке, которая указывает, как этот

www/v2_legacy -> /d1/v2_legacy/ 

Теперь мне нужен кто-нибудь, кто обращается к www.mysite. ком быть перенаправлены на www.mysite.com/mynewsite/public/

Но мне также нужно сохранить некоторые старые связи в живых, таким образом, доступ к www.mysite.com/clients/whatever должен перенаправить пользователей на www.mysite.com/v2_legacy/clients/whatever. Помимо папки «клиенты» у меня будет еще два других.

Это мой .htaccess, который находится в папке WWW /:

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^clients/(.*)$ v2_legacy/clients/$1 [L] 

RewriteCond %{REQUEST_URI} !^v2_legacy/(.*)$ 
RewriteRule ^(.*)$ mynewsite/public/$1 [L] 

Я уже пробовал так много вариантов этого файла, но до сих пор не могу получить поведение наши правила.

Используя вышеуказанный файл htaccess, доступ к www.mysite.com будет перенаправлен правильно, но доступ к www.mysite.com/clients/somestuff не будет. Однако, если я прокомментирую последние RewriteCond и RewriteRule, доступ к www.mysite.com/clients/somestuff будет работать корректно, но доступ к www.mysite.com, очевидно, не будет работать.

ответ

2

Переменная %{REQUEST_URI} всегда начинается с косой черты. Таким образом, сопоставление с ^something всегда будет ложным (и отрицание, что делает его всегда истинным). Кроме того, вам нужно предотвратить бесконечный цикл, так как ^(.*)$ соответствует mynewsite/public/....

Вы бы в конечном итоге с чем-то вдоль линий:

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^clients/(.*)$ v2_legacy/clients/$1 [L] 

RewriteCond %{REQUEST_URI} !^/(v2_legacy|mynewsite) 
RewriteRule ^(.*)$ mynewsite/public/$1 [L] 
+0

вау, спасибо так много, я не знал о слэш. Это работает наконец. –

Смежные вопросы