2012-05-02 20 views
0

簡単な質問のようです。しかし、私は単純に理解していない:単純な正規表現はhtaccessで動作しません

RewriteEngine On 
RewriteRule ^m(.+)$ ?s=$1 

しかし、これにはない:

RewriteEngine On 
RewriteRule ^(.+)$ ?s=$1 

それは、内部サーバーエラーを返すhtaccessのルールの

この作品は、作業を行います。その正規表現で何が問題なのですか?働くために何を変えなければならないのですか?

答えて

0

「うまくいかない」とはどういう意味なのでしょうか?正確には何かわかりませんが、書き換えループに詰まっている可能性があります。

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^?s= 
RewriteRule ^(.+)$ ?s=$1 

私はこれをテストしていませんが、何すでにSパラメータがなかった場合にのみ書き換えされて行う必要があり、コメントを追加しました:

これを試してみてください?すること。

+0

これは動作しません。 'RewriteRule ^([a-z] +)$?s = $ 1'を使って解決しました。つまり、ドットは正規表現から消えます。しかし、疑問は残っています:なぜ '^(。+)$'は働かないのですか? –

+0

おそらく同じ理由で、ドットには?=部分も含まれているので、書き直しを続けようとします(つまり、s =?s =、?s =?s =?s =など)。それを文字で始まるURIに限定することによって、?を除いて、私が作ったのと同じことを本質的にやっています。 –

+0

私は私が間違っていたことを知っていると思う、私は脱出していたはずですか? (これは正規表現で特別な機能を持っています)。 –

0

まあ、RewriteCondsで実際のクエリ文字列を探すこともできます。試してみることができます:

RewriteEngine On 
RewriteCond %{QUERY_STRING} !s= 
RewriteRule ^(.+)$ ?s=$1 
関連する問題