2

さまざまなソースからまとめたこの .htaccess コードがあり、いくつかの追加オプションを追加するのに問題があります。

<Limit GET POST PUT>
 order deny,allow
 deny from all
 allow from XXX.XXX.XXX.XXX
</Limit>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d

# allow things that are certainly necessary
RewriteCond %{REQUEST_URI} "/css/" [OR]
RewriteCond %{REQUEST_URI} "/js/" [OR]
RewriteCond %{REQUEST_URI} "/images/"

RewriteRule .* - [L]
RewriteRule ^([a-zA-Z0-9-/_]+)/([a-zA-Z0-9-/_%]+)/([a-zA-Z0-9-/_]+)/([a-zA-Z0-9-/_]+)$  index.php?primary=$1&secondary=$2&tertiary=$3&quaternary=$4 [QSA]
RewriteRule ^([a-zA-Z0-9-/_]+)/([a-zA-Z0-9-/_%]+)/([a-zA-Z0-9-/_]+)$  index.php?primary=$1&secondary=$2&tertiary=$3 [QSA]
RewriteRule ^([a-zA-Z0-9-/_]+)/([a-zA-Z0-9-/_%]+)$  index.php?primary=$1&secondary=$2 [QSA]
RewriteRule ^([a-zA-Z0-9-/_]+)$  index.php?primary=$1 

www.まず、URL での強制使用を追加したいと思います。これを追加しようとすると、結果の URLは変数RewriteRuleを含む現在の の出力になります。GETこれは、ルールがループで機能するためだと思いますか?

私がやりたいもう 1 つのことは、現在のルールの基準を満たさないものをすべてキャッチし、それを のようなものに送信することですindex.php?primary=error。不正な URL や不正な文字がある場合、サイトはそのページを表示しようとさえしないため、現在の動作方法は私の使用にはほぼ完璧です。サイトはすべての URL を安全に作成するため、不適切な URL はアドレス バーで実験した結果になりますが、見つからないページではなく、エラー ページが表示されると便利です。

前もって感謝します..そして、混乱して使用して申し訳ありませんRewriteRule

4

1 に答える 1

2

ハイフンは、文字クラスの最初または最後の記号として表示される場合にのみエスケープ解除できるため、正規表現は正しくありません。それ以外の場合はエスケープする必要があります。

代わりに:[a-zA-Z0-9-/_%]
使用:[\w%/-]

ルールの完全なセット:

RewriteEngine On
RewriteBase /

# add www in the URL    
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
# allow things that are certainly necessary
RewriteCond %{REQUEST_URI} ^/(css|js|images)/ [NC]
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ index.php?primary=$1&secondary=$2&tertiary=$3&quaternary=$4 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?primary=$1&secondary=$2&tertiary=$3 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?primary=$1&secondary=$2 [QSA,L]
RewriteRule ^([^/]+)/?$ index.php?primary=$1 [QSA,L]
于 2013-10-05T13:33:50.937 に答える