.htaccessを使用して、すべてのURLをhttp://
からhttps://
に301リダイレクトしようとしています。一部の動的に生成されたURLは除外する必要があります。
私が行ういくつかのURLの例notリダイレクトしたい:
example.com/tt.php?xxx (where xxx can be any number)
example.com/top/xxx/site/xxx (where xxx can be any number or characters)
現在、私の.htaccessは次のようになっています。
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} ^www\. [NC]
RewriteCond %{HTTP_Host} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
動的URLを「除外」するにはどうすればよいですか?
現在、私の
.htaccess
は次のようになっています。
.htaccess
ファイルにあるのがそれだけの場合は、除外するURLにいくつかの例外を含めることができます前リダイレクトする既存のルール。
例えば:
# Prevent further processing if requesting a URL of the form
# example.com/tt.php?xxx (where xxx can be any number)
RewriteCond %{QUERY_STRING} ^\d+$
RewriteRule ^tt\.php$ - [L]
# Prevent further processing if requesting a URL of the form
# example.com/top/xxx/site/xxx (where xxx can be any number or characters)
RewriteRule ^top/[^/]+/site/ - [L]
上記の「例外」を配置することにより、firstその後、後続のディレクティブ(つまり、リダイレクト)はスキップされます。
PDATE:.htaccess
ファイルにこれらのURLに引き続き適用される他のディレクティブがある場合は、代わりに既存のリダイレクトルールに条件を追加できます。
例えば:
RewriteCond %{THE_REQUEST} !^[A-Z]{3,6}\s/tt\.php\?\d+\sHTTP
RewriteCond %{REQUEST_URI} !^/top/[^/]+/site/
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} ^www\. [NC]
RewriteCond %{HTTP_Host} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
最初の2つの条件には、その意味を否定するために、CondPatternに!
プレフィックスが付いていることに注意してください。したがって、この条件は、正規表現が一致する場合にのみ成功しますnot一致します。
最初の例で行ったように2つのディレクティブ(RewriteCond
とRewriteRule
)を使用してURL /tt.php?xxx
と照合する代わりに、これを1つのルールに結合し、THE_REQUEST
と照合したことに注意してください。この1つのルールのロジックを単純化します。
THE_REQUEST
サーバー変数は、HTTPリクエストの最初の行を保持します。