1

特定の URL をルールから除外したいのですが、Apache に関する知識がまったくないため、条件を明確にすることができないようです。

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 を含むすべての URL を除外する方法があるはずですが、方法がわかりません。

また、誰かが ^ 、 (.*) 、 $ とは何かを説明できますか? 彼らはオペレーターだと思いますが、情報が見つからないようで、現在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 に答える