2

私はmod_rewriteに関するすべてのチュートリアルを経験しましたが、これを理解することはできません。

www.domain.com/?s=query検索URLをからに書き換えたいwww.domain.com/search/query。これまでのところ、私はこのルールを使用してこれを達成することができました:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(#[^?&\ ]*)?\?([^&\ ]*&)?s=([^&\ ]+)[^\ ]*\ HTTP/
RewriteRule ^$ http://www.domain.com/search/%3? [R=301,L]

問題は、一部のクエリでは、複数の検索結果ページにアクセスできるようになることですwww.domain.com/?s=query&nggpage=n(nは2よりも優れています)。

その場合、私はそれを書き直して、次のようなURLになりたいと思いますwww.domain.com/search/query/nggpage-n

それを達成する方法がよくわかりません。私は助けを求めています。

4

1 に答える 1

2

書き換えを複数のステップで分解する必要があると思います。このようなものが仕事をします、私はあなたの条件を少し単純化しました:

  1. 検索パラメーターが存在するかどうかを確認し、ターゲット パスに書き換えて、env後のテスト用にフラグを設定します

    RewriteCond %{QUERY_STRING} s=([^&\ ]+)
    RewriteRule ^/?$ /search/%1 [E=redirect:true]
    
  2. リダイレクトが設定され、ページネーション パラメータが見つかった場合は、ページネーションのパスを追加します

    RewriteCond %{ENV:redirect} true
    RewriteCond %{QUERY_STRING} nggpage=(\d+)
    RewriteRule ^/(.*)$ /$1/nggpage-%1
    
  3. ページ 1 のページネーションを削除する

    RewriteCond %{ENV:redirect} true
    RewriteRule ^/(.*)/nggpage-1$ /$1
    
  4. リダイレクトが設定されている場合は、リダイレクトしましょう

    RewriteCond %{ENV:redirect} true
    RewriteRule ^/(.*)$ http://www.domain.com/$1? [R=301,L]
    
于 2012-04-18T09:56:46.743 に答える