2013-03-15 1 views
1

Я хотел бы исключить определенные URL-адреса из правила, но поскольку у меня есть абсолютное знание об apache, я не могу прикрыть условия.исключить URL-адреса или шаблоны из правила

RewriteEngine On 
RewriteCond %{HTTP:X_FORWARDED_PROTO} https 
#RewriteCond %{REQUEST_URI} !^/(account|checkout|login) 
RewriteCond %{REQUEST_URI} !/account/login.html 
RewriteCond %{REQUEST_URI} !/index.php?main_page=password_forgotten 
RewriteCond %{REQUEST_URI} !/account/ 
RewriteCond %{REQUEST_URI} !/account/edit.html 
RewriteCond %{REQUEST_URI} !/account/address-book/ 
RewriteCond %{REQUEST_URI} !^/account/change-password.html 
RewriteCond %{REQUEST_URI} !^/account/notifications/ 
RewriteCond %{REQUEST_URI} !^/index.php?main_page=checkout&fecaction=null 
RewriteCond %{REQUEST_URI} !^/index.php?main_page=checkout_shipping_address 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] 

Я считаю, что должен быть способ, чтобы исключить все адреса, содержащие/счета/или = проверку, но я не знаю, как.

Также может кто-то объяснить, что такое ^, (. ​​*), $? Я думаю, что они операторы, но я не могу найти какую-либо информацию и не имею времени, чтобы узнать apache прямо сейчас.

ответ

0

Если вы read this вы можете увидеть, что: выбор

^ = начало строки

(...) = Группа

. = любой одиночный символ

* = ноль, 1 или более.

$ Конец строки

+0

спасибо, большой ресурс – user2173812

0

Все эти странные символы являются частью регулярных выражений. См. Здесь mod_rewrite Introduction- Regular Expressions.

Вы можете опустить все

RewriteCond %{REQUEST_URI} !/account/login.html 
RewriteCond %{REQUEST_URI} !/account/edit.html 
RewriteCond %{REQUEST_URI} !/account/address-book/ 
RewriteCond %{REQUEST_URI} !^/account/change-password.html 
RewriteCond %{REQUEST_URI} !^/account/notifications/ 

потому

RewriteCond %{REQUEST_URI} !/account/ 

уже охватывает все эти.

Тест для =checkout отличается от другого, поскольку это не часть пути URL, а часть строки запроса. Для того, чтобы исключить любой запрос, который включает в себя =checkout в строке запроса

RewriteCond %{QUERY_STRING} !.=checkout 
+0

спасибо очень много, к сожалению, я думаю, что моя проблема заключается в правиле где-то, как эти изменения не работают, у меня тоже пытался исключить только index.php, но без результатов. – user2173812

+0

@ user2173812 Ваш 'RewriteRule' заменяет' $ 1' '$ 1', поэтому это неудивительно. Если у вас нет других правил, отображаемый .htaccess является noop. –

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