2013-11-10 4 views
1

Я только что перестроил и запустил сайт (назовем его example.com) и назначил субдомен legacy.example.com для старого сайт. Мне нужно разрешить людям доступ к истории заказов на старом сайте, но я не хочу, чтобы они просматривали продукты и разрешали доступ к тележке и кассе на старом сайте. Поэтому мне нужно перенаправить все, кроме Логина/выхода из системы страниц, на странице учетной записи, а страница поступления:.htaccess - перенаправить все страницы, за исключением 1 страницы и другой страницы, в зависимости от ее запроса.

Login page = page.php?pg=extranet&mode=login 
Logout page = page.php?pg=extranet&mode=logout 
Account page = page.php?pg=extranet 
Order listing page = page.php?pg=extranet&mode=orderstatus 
Receipt page = receipt.asp 

Я баловаться с этим для большей части дня, и был по всему интернету и обратно и не может найти магическое сочетание «и» и «или» для условия. Возможно ли это, или мне нужно разбить его на несколько наборов условий/правил? Как мне это сделать?

RewriteCond %{REQUEST_URI} !^/receipt.asp [OR,NC] 
RewriteCond %{REQUEST_URI} !^/page.asp [NC] 
RewriteCond %{QUERY_STRING} !^pg=extranet [OR,NC] 
RewriteCond %{QUERY_STRING} !^pg=extranet&mode=login [OR,NC] 
RewriteCond %{QUERY_STRING} !^pg=extranet&mode=logout [OR,NC] 
RewriteCond %{QUERY_STRING} !^pg=extranet&mode=orderstatus [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 
+0

Обратите внимание, что строка запроса переменные могут появляться в любом порядке, так что люди могут все еще получить доступ к странице, если они идут в 'page.php? Mode = логин и рд = extranet' и т.д. – Sumurai8

ответ

2

ли это наоборот, т.е., если входная URL-адрес соответствует какой-либо из указанных выше условий, когда пропуск переписывает.

RewriteEngine On 

# if login/logout/orderstatus don't do anything 
RewriteCond %{QUERY_STRING} ^pg=extranet(&mode=(login|logout|orderstatus))?$ [NC] 
RewriteRule ^page\.php$ - [L] 

# if receipt page don't do anything 
RewriteRule ^receipt\.php$ - [L,NC] 

# otherwise redirect to new site 
RewriteRule^http://www.example.com%{REQUEST_URI} [R=301,L,NE] 
+1

+1, да очень хорошее упрощение как всегда делал @anubhava. – jacouh

+0

Это работает! Спасибо! И теперь я заметил, что это также исключает мои css и js-файлы, которые необходимы для отображения страницы. К сожалению! Как я также исключаю их перенаправление? Файлы находятся в каталогах/css и/js. –

+0

@jacouh: Большое спасибо. Мишель: Вы можете изменить второе правило как: 'RewriteRule^receipt \ .php | css/| js/- [L, NC]', чтобы пропустить css, js-файлы – anubhava

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