我想使用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>
答案 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:我在规则中做了一些更正,以更好地处理意外情况。