2012-02-16 14 views
-1

私は以下の規則を使用してhttp://www.example.com/abchttp://www.example.com/search.php?abc のようなURLを書き換える必要があります、それは動作しません、なぜそれは一致しないのですか?HTTPのRewriteCondとのRewriteRule

 
RewriteCond %{REQUEST_URI} ^search.php 
RewriteRule ^search.php?q=([-0-9a-zA-Z]+) $1 

答えて

1
  • %{REQUEST_URI}常に先頭に/を持っています。したがってRewriteCond %{REQUEST_URI} ^search.phpは決して一致しません。

  • RewriteRule Directive

    パターンは、Perl互換の正規表現です。最初のRewriteRuleでは、リクエストの(%でコード化された)URLパスに適用されます。後続のパターンは、最後に一致したRewriteRuleの出力に適用されます。

  • ?は、エスケープされていないときに前の文字の1つまたはまったく一致しないことを意味します。だからあなたの^search.php?q=...は一致します:PCRE man pages

    から

    • search.phpq=...
    • search.phq=...

を?

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_URI} ^/([\w]+)/?$ [NC] 
RewriteRule^search.php?q=%1 [L,QSA] 

RewriteCond %{REQUEST_URI} ^/search.php [NC] 
RewriteCond %{QUERY_STRING} ^q=([\w\d-]+)$ [NC] 
RewriteRule^/%1? [L,R=301] 

  • NC(NOCASE):flag_nc Apache Docs
  • あなたがこれを行う必要があります( も0または1数量詞 も数量詞最小化

    の意味を拡張フラグL(最終)               :flag_l Apache Docs

+0

NCとLは何ですか? – user121196

+0

@ user121196答えの更新を確認してください。 – ThinkingMonkey

+0

いいえ、まだ動作しません – user121196

関連する問題