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

重写规则 ^/?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],就像规则匹配的频率一样。此外,a = 附加到查询字符串的末尾。这是为了在 URL 中创建一个标记,表明至少发生了一次重写。

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

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

于 2013-04-05T21:32:09.117 回答