書き換えルールで文字を置き換える

ここに私の現在の規則があります:

RewriteCond %{QUERY_STRING} ^to=(one|seventeen|thirty\+four)
RewriteRule ^/folder/page.php$ http://www.site.com/folder/category/%1?  [L]
RewriteRule ^folder/category/(.+)\+(.+)$ http://www.site.com/folder/category/$1-$2 [L]

最初のルールは正常に動作しますが、単語がクエリ文字列内にあれば完全にリダイレクトされますが、リダイレクトされたときには30 + 4を34にすることはできません。

どんな助けでも大歓迎です。

1

2 答え

動作するはずです:

RewriteCond %{QUERY_STRING} ^to=(one|seventeen|thirty\+four)
RewriteRule ^folder/page.php$ folder/category/%1  [NC,QSA,L]
RewriteRule ^folder/category/(.+)\+(.+)$ folder/category/$1-$2 [NC,QSA,L]

そして今、3つのヒント:

1)

以下の質問をする前に、すべての内容を必ず読んでください:

2)

RewriteLog というディレクティブを使用してみてください:問題を追跡するのに役立ちます:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

3)

正規表現をチェックする私の好きなツール:

http://www.quanetic.com/Regex (don't forget to choose ereg(POSIX) instead of preg(PCRE)!)

このツールは、URLをチェックして、有効かどうかを確認するときに使用します。

1
追加された
これはどちらもうまくいかず、リダイレクトされます:folder/category/thirty + four?to = thirty + four
追加された 著者 pdlol,

まず、 RewriteRule ^/folder/page.php $ は決して一致しません。ルールがサーバ設定の代わりに.htaccessファイルにある場合、URIのプレフィックス(先頭のスラッシュ)が削除されます。

第2に、 http://www.site.com/ をターゲットに含めると、ブラウザは内部的に書き換えられる代わりにリダイレクトされます。 2番目のルールを適用できるように、最初のルールから http://www.site.com/ を削除する必要があります。

1
追加された
どのように .htaccess ファイルについて話したのですか? user1088771 つまり、 .htaccess ファイル内にあればは一切一致しません。
追加された 著者 Olivier Pons,
しかし、私は、人々に単なる「手がかり」を与え、仕事をしないことが私のやり方よりも賢明だと理解しています;)
追加された 著者 Olivier Pons,
私はあなたの評判であなたをキャッチすることはできません、あなたは私にはあまりにも良いです。もっと "賞金"をしてください=)
追加された 著者 Olivier Pons,
私はそれがタグ付けされているので、htaccessファイル内にあると仮定しました。関連する質問もあります: stackoverflow.com/questions/8529848/…
追加された 著者 Jon Lin,
そのような場合は、 folder/category /(.+)$+(.+)$式の前に/を追加し、.htaccessを削除する必要があります。タグを使用してください。しかし、2番目のメモはまだ適用されます。
追加された 著者 Jon Lin,
これはhtaccessファイルにはなく、vhostファイルにあります。
追加された 著者 pdlol,