我只是在寻找一种解决方案来改造任何=,?和&在查询字符串中找到一个简单的斜杠/。 更具体地说,我的链接类似于:
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。 我需要一个更通用的,无论主页是什么,无论变量是什么。 可以这样做吗?
有什么建议吗? 感谢
答案 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以获取一些有用的提示。