0

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

这是我的要求,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

所以她是我的网站 url FOR CATEGORY PAGES

http://www.mysite.com/category1

对于产品页面

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

所以问题在于第二个 url 重写条件,即产品页面 url。当我将 url 放入浏览器时,它会转到 404。而 1 重写条件似乎有效。请帮助以上述格式访问网页。

4

2 回答 2

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:为了更好地处理突发情况,我在规则中做了一些更正。

于 2013-09-19T10:49:05.083 回答
0

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

RewriteRule ^([A-Za-z-_]+)$ category.php?arg=$1 [L]
RewriteRule ^([A-Za-z-_'']+)/([0-9]+)$ product.php?arg=$1&pid=$2 [L]
于 2013-09-19T10:36:19.960 回答