2

送信時に次のような URL を生成する検索フォームがあります。

http://mydomain.com/index.php?find=some+text

そして、私はそれを次のようにすることを目指しています:

http://mydomain.com/find/some+text

.htaccess でこれを行うにはどうすればよいですか?

これまでのところ、私はこれを持っています:

RewriteCond %{REQUEST_URI}  ^/index\.php$
RewriteCond %{QUERY_STRING} &?find=(.*)&?
RewriteRule ^index.php$ find/%1? [R=301,L]

RewriteRule ^find/(.*)$ index.php?find=$1 [L]

これは、クエリ (つまり、検索対象) に数字、文字、またはアンダースコアのみが含まれている場合に機能しますが、スペースやその他の文字を含むあらゆるものを検索できるようにしたいと考えています!

4

3 に答える 3

1

したがって、URL に + (プラス記号) を使用することを許可していない Web サーバーの構成が原因で、404 エラーが発生したと思われます。最初の + で壊れ、その名前でファイルを見つけようとします。

それを整理すると、書き換えルールは次のようになります。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /*.index\.php\?find=([^&\.]+)?\sHTTP
RewriteRule ^/?index.php$ /find/%1? [L,R=301]
RewriteRule ^/?find/(.*)$ /index.php?find=$1 [L,NC]

ご協力いただきありがとうございます!

于 2012-10-23T10:33:48.100 に答える
0

URI は 2 番目のルールによって書き換えられるため、URI ではなく実際のリクエストと照合する必要があります。これにより、リダイレクト ループが発生します。

ブラウザをリダイレクトするには:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?find=([^&\.]+)(&([^\ ]+))?
RewriteRule ^/?index.php$ /find/%1?%3 [L,R=301]

内部的に書き戻すには

RewriteRule ^/?find/(.*)$ /index.php?find=$1 [L,QSA]
于 2012-10-22T18:19:49.133 に答える
0

このようなものはうまくいくべきではありませんか?

RewriteRule ^find/([^/]*)$ /index.php?find=$1 [L]
于 2012-10-22T11:41:18.967 に答える