2013-02-06 126 views
0

我的一行代码使用了mod_rewrite拉起从数据库的结果,例如:mod_rewrite的规则herierarchy

example.com/anytext/itemid使用以下网址:example.com/item.php?id=itemid

一个简单的重写。不过,我想制定一个优于它的规则。下面我们来看看我的意思:

.htaccess文件例如:

RewriteRule ^products/[^/]+/(.*)$ products/item.php?id=$1 [L] 

这个规则告诉example.com/products/anytext/itemid使用item.php使用URL的最后部分的“/”后,这是该项目的ID来显示。

但是,我想要一些URL重定向而不是重写。例如:

products/green-dress/4023成为:

products/green-dress-with-stain/4023 无需重写规则中踢!

现在,我已经在.htaccess中尝试了一个简单的301重定向,但它以某种方式干涉了重写规则。

而不是去

products/green-dress-with-stain/4023不言而喻:

products/green-dress-with-stain4023?id=4023

见末尾的URL如何得到一个变量?奇怪的!

谢谢, 戴夫

+0

Mod_alias(例如'Redirect'和'RedirectMatch'指令)优先于mod_rewrite。您可以使用它们来确保在.htaccess文件中首先解析并执行它们。文件内的位置是不相关的。 –

+0

当我做“重定向301 /绿色礼服/ 4052 /绿色礼服与污点/ 4052”的URL变成:example.com/green-dress-with-stain/4052?id=4052“...我不明白为什么它在最后添加ID变量......怪异的! –

+0

@faa我的猜测是因为重写规则干扰了重定向规则... –

回答

0

.htaccess文件中的规则按顺序执行的,所以如果你需要有一个规则凌驾于其他,简单地把它先在文件中。

+0

我如何使它不重定向301永久重定向?我基本上有一些项目获得更新的URL,我不希望旧的URL工作,因为我希望旧的URL被引导到新的URL。 –

+0

我添加了一个301重定向,但重写规则在最后插入,并在重定向URL的末尾添加了变量?id = number ...有关如何解决的任何想法? –