如果没有尾部斜杠,重写不起作用

时间:2013-01-24 08:18:24

标签: .htaccess mod-rewrite trailing-slash

我无法在不输入尾部斜杠的情况下使用URL。

这是:

www.domain.com/shop/buy/products/show/range/

.htaccess重写规则是:

RewriteRule ^shop/buy/([A-Za-z0-9]+)/show/([A-Za-z0-9\-\,]+)/?$  _shop/products.php?trg=${productmap:$1}&range=$2 [L]

它适用于尾部斜杠(我不希望在URL中)但不能没有。我还要补充一点,如果我要从URL中删除'/ show /'(我不能这样做),它的工作没有斜杠,或者'range'包含短划线' - ',如'new - 产品',它也有效。

但是,此URL可以使用或不使用尾部斜杠:

www.domain.com/shop/buy/products/show/range/color

.htaccess此网址的重写规则为:

RewriteRule ^shop/buy/([A-Za-z0-9]+)/show/([A-Za-z0-9\-\,]+)/([A-Za-z0-9\-\,]+)/?$    _shop/products.php?trg=${productmap:$1}&range=$2&color=$3 [L]

如何在没有尾随斜杠的情况下获取第一个工作URL?这可能是非常明显的事情,因为我是最近使用.htaccess的新手,但我现在花了几个小时盯着代码和阅读关于重写的论坛帖子但是却无法解决这个问题。谢谢!

2 个答案:

答案 0 :(得分:0)

我不太确定,但是你试着把/?放在括号中:(/)?,我认为这样可行:

RewriteRule ^shop/buy/([A-Za-z0-9]+)/show/([A-Za-z0-9\-\,]+)([/]?)$  _shop/products.php?trg=${productmap:$1}&range=$2 [L]

答案 1 :(得分:0)

您可以测试此代码

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase   /
RewriteRule ^shop/buy/(.*?)/show/(.*)/(.*)$ _shop/products.php?trg=$1&range=$2&color=$3 [S,L,QSA]
RewriteRule ^shop/buy/(.*?)/show/(.*)$ _shop/products.php?trg=$1&range=$2 [S,L,QSA]

样品:

www.domain.com/shop/buy/products/show/range /

www.domain.com/shop/buy/products/show/range

重定向到:

www.domain.com/_shop/products.php?trg=products&range=range

www.domain.com/shop/buy/products/show/range/color

www.domain.com/shop/buy/products/show/range/color /

重定向到:

www.domain.com/_shop/products.php?trg=products&range=range&color=color

另一种方法是你只能使用此代码

RewriteRule ^shop/buy/(.*?)/show/(.*)$ _shop/products.php?trg=$1&range=$2 [L,QSA]

在PHP中的分割范围之后

list($range,$coler)=explode("/",$_GET['range']); 

这也是工作。