2017-01-31 9 views
0

私の.htaccessファイルに次のルールを持っているし、それは私がID($ 3)は3になりますどこのルールを変更する必要が.htaccessの書き換えルールブレーク

RewriteRule ^eat/?([a-zA-Z0-9-]+)?/?([a-zA-Z0-9-]+)?/?([0-9]+)?/?([a-zA-Z0-9-]+)?/?$ /incl/pages/details.php?state=$1&city=$2&ID=$3&name=$4 [NC,L] 

正常に動作します文字の英数字(常に大文字)の値で、3桁ではありません。

は、私が試してみたが、私のルールは動作を停止:

RewriteRule ^eat/?([a-zA-Z0-9-]+)?/?([a-zA-Z0-9-]+)?/?([A-Z0-9]+)?/?([a-zA-Z0-9-]+)?/?$ /incl/pages/details.php?state=$1&city=$2&ID=$3&name=$4 [NC,L] 

私は何をしないのですか?

+0

問題は、あなたが予想しているよりも長いか短い部分に一致するパターンにつながる可能性のあるすべての '/? 'でしょう。あなたは怠惰になり、可変数の引数にマッチする単一のルールしか使わないように見えます。それは堅牢ではありません。 – arkascha

+0

@arkaschaどういう意味ですか?私は "私を取り除かなければならない?" – santa

答えて

0

私には、これはパラメータの明確な分離に問題があるようです。キャプチャグループが同じ文字セットに一致する場合、疑問符演算子を使用して可変数のパラメータを書き換えることができる「遅延」ルールを実装する方法があります。

代わりに、固定数のパラメータに対して個別のルールを指定することをお勧めします。

RewriteEngine on 
RewriteRule ^eat/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([A-Z0-9]+)/([a-zA-Z0-9-]+)/?$ /incl/pages/details.php?state=$1&city=$2&ID=$3&name=$4 [NC,L] 
RewriteRule ^eat/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([A-Z0-9]+)/?$ /incl/pages/details.php?state=$1&city=$2&ID=$3 [NC,L] 
RewriteRule ^eat/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /incl/pages/details.php?state=$1&city=$2 [NC,L] 
RewriteRule ^eat/([a-zA-Z0-9-]+)/?$ /incl/pages/details.php?state=$1 [NC,L] 
RewriteRule ^eat/?$ /incl/pages/details.php [NC,L] 

質問:あなたに本当にNCフラグが必要であることは、このような拡張にその演算子を使用しないことを可能にしますか? eatは本当に書かれているのですか?大文字または大文字または小文字だけをキャプチャしているグループ間で違うあなたの試みに干渉するので。


と一般的なヒント

:あなたは、常に動的な設定ファイル(「.htaccessファイル」)を使用するのではなく、HTTPサーバのホスト設定内のこのようなルールを置くことを好む必要があります。これらのファイルは悪名高いエラーが発生しやすく、デバッグが難しく、サーバーの速度が遅くなります。彼らは、あなたがホスト構成(本当に安いホスティングサービスプロバイダを読む)を持っていないか、独自の書き換えルールを書くことに頼っているアプリケーションを持っている場合にのみ、最後のオプションとして提供されます(これは明白なセキュリティの悪夢です)。