mod_rewrite:transform =和&用斜杠

时间:2013-04-05 18:42:07

标签: mod-rewrite url-rewriting friendly-url

我只是在寻找一种解决方案来改造任何=,?和&在查询字符串中找到一个简单的斜杠/。 更具体地说,我的链接类似于:

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 ......或者其他)。 我已经google了很多,但没有找到任何好的解决方案来实现我正在寻找的东西。 我发现了复杂的重写规则,但它们都包含“页面名称”: 即。

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

该规则仅适用于index.php和已知变量,如foo,bar。 我需要一个更通用的,无论主页是什么,无论变量是什么。 可以这样做吗?

有什么建议吗? 感谢

1 个答案:

答案 0 :(得分: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对重复匹配由&amp;分隔的标记。或=并将其添加到路径中。重要的标志是[N],它使整个规则集重新开始,就像规则匹配一样。此外,a =附加到查询字符串的末尾。这是在URL中创建一个标记,至少发生了一次重写。

第二个规则集检查完全重写URL后剩余的=标记并发出重定向。

请查看http://wiki.apache.org/httpd/RewriteQueryString以获取一些有用的提示。