1

クエリ文字列で見つかった =、?、& を単純なスラッシュ / に変換するソリューションを探していました。より具体的には、私のリンクは次のようなものです。

http://www.mydomain.com/product.php?c=1&sc=12&products_id=15

そして、私はこれが好きです: http://www.mydomain.com/product.php/c/1/sc/12/products_id/15

マスター ページが何であれ (この場合は product.php ですが、foo.php、bar.php など)。私はたくさんグーグルで検索しましたが、探しているものを達成するための良い解決策が見つかりませんでした. 複雑な書き換えルールを見つけましたが、それらにはすべて「ページ名」が含まれています。

RewriteRule ^/?index/([^/]+)/([^/]+)$ /index.php?foo=$1&bar=$2 [L,QSA]

このルールは、index.php と、foo、bar などの既知の変数にのみ適用されます。マスターページが何であれ、変数が何であれ、より一般的なものが必要です。これはできますか?

なにか提案を?ありがとう

4

1 に答える 1

0

Apache >= 2.2 を使用していると仮定します。これを apache conf に追加します。

<IfModule mod_rewrite.c>
    RewriteEngine On

    # you absolutely need to use RewriteBase if this snippet is in .htaccess
    # if the .htaccess file is located in a subdirectory, use
    # RewriteBase /path/to/subdir
    RewriteBase /

    RewriteCond %{QUERY_STRING} ^(=|&)*([^=&]+)(=|&)?(.*?)=*$
    RewriteRule ^(.*)$ $1/%2?%4= [N,NE]

    RewriteCond %{QUERY_STRING} ^=$
    RewriteRule ^(.*)$ $1?  [R,L]
</IfModule>

最初の RewriteCond/RewriteRule ペアは、& または = で区切られたトークンに繰り返し一致し、それをパスに追加します。重要なフラグは、ルールが一致するたびにルールセット全体を最初からやり直す [N] です。さらに、クエリ文字列の末尾に = が追加されます。これは、少なくとも 1 回の書き換えが発生したことを示すマークを URL に作成するためです。

2 番目のルールセットは、URL が完全に書き換えられた後に残る = マークをチェックし、リダイレクトを発行します。

役立つヒントについては、 http://wiki.apache.org/httpd/RewriteQueryStringを参照してください。

于 2013-04-05T21:32:09.117 に答える