1

我想从规则中排除某些 url,但由于我对 apache 的了解绝对为 0,我似乎无法确定条件。

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]

我相信应该有一种方法可以排除所有包含 /account/ 或 =checkout 但我不知道如何的网址。

也有人可以解释一下 ^ , (.*) , $ 是什么?我认为他们是操作员,但我似乎找不到任何信息,现在也没有时间学习 apache。

4

1 回答 1

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
于 2013-03-15T15:51:01.157 回答