私は以下の規則を使用してhttp://www.example.com/abc にhttp://www.example.com/search.php?abc のようなURLを書き換える必要があります、それは動作しません、なぜそれは一致しないのですか?HTTPのRewriteCondとのRewriteRule
RewriteCond %{REQUEST_URI} ^search.php RewriteRule ^search.php?q=([-0-9a-zA-Z]+) $1
私は以下の規則を使用してhttp://www.example.com/abc にhttp://www.example.com/search.php?abc のようなURLを書き換える必要があります、それは動作しません、なぜそれは一致しないのですか?HTTPのRewriteCondとのRewriteRule
RewriteCond %{REQUEST_URI} ^search.php RewriteRule ^search.php?q=([-0-9a-zA-Z]+) $1
%{REQUEST_URI}
常に先頭に/
を持っています。したがってRewriteCond %{REQUEST_URI} ^search.php
は決して一致しません。
パターンは、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の意味を拡張フラグL
(最終) :flag_l Apache Docs
NCとLは何ですか? – user121196
@ user121196答えの更新を確認してください。 – ThinkingMonkey
いいえ、まだ動作しません – user121196