URL重写无效

时间:2013-09-19 10:33:19

标签: php .htaccess mod-rewrite

我想使用URL重写到一个网站。我已经在服务器中放置了一个.htaccess文件,并打开了重写模式,它似乎正在工作,除了我遇到的一个问题。 我有两个php扩展文件,分别是category.php和products.php resp。

这是我的要求,当满足一个条件时应该调用category.php并且应该调用products.php另一个条件是满足

的.htaccess

RewriteRule ([A-Za-z-_]+) category.php?arg=name
RewriteRule ^([A-Za-z-_'']+)/([0-9]+) product.php?arg=name&pid=id

所以她是我的网站网址 对于类别页面

http://www.mysite.com/category1

对于产品页面

http://www.mysite.com/product-name/101

所以问题在于第二个url重写条件,即产品页面url。当我把你的l l放在浏览器中它转到404.Whereas1重写条件似乎工作。请帮助以上述格式访问网页。< / p>

2 个答案:

答案 0 :(得分:0)

您需要为正则表达式添加边界并反向引用捕获的分组:

RewriteRule ^([A-Za-z-_]+)$ category.php?arg=$1 [L]
RewriteRule ^([A-Za-z-_'']+)/([0-9]+)$ product.php?arg=$1&pid=$2 [L]

答案 1 :(得分:0)

问题是在正则表达式的字符类连字符应该是或者开始或结束,否则需要进行转义(否则它将表示范围)。

我们的两条规则:

RewriteRule ([A-Za-z-_]+) category.php?arg=name
RewriteRule ^([A-Za-z-_'']+)/([0-9]+) product.php?arg=name&pid=id

未使用正确的正则表达式,会产生错误的结果。

使用以下代码替换您的规则:

RewriteRule ^([a-z_-]+)/?$ /category.php?arg=$1 [L,NC,QSA]
RewriteRule ^([a-z_'-]+)/([0-9]+)/?$ /product.php?arg=$1&pid=$2 [L,NC,QSA]

PS:我在规则中做了一些更正,以更好地处理意外情况。