我之前发过一个问题,但对答案不满意。例如,我有一个网址
http://example.com/details.php?a=100&b=101&slug=power-programming-in-php
我想通过重写规则将其写为
http://example.com/power-programming-in-php
我目前正在使用一条规则:
RewriteRule ^([a-zA-Z0-9]*-[a-zA-Z0-9]*)$ paper-ads-details.php?a=$1&b=$2&slug=$3 [L]
我现在陷入困境,有人有什么建议吗?
答案1
至少您的 RewriteRule 是有缺陷的,因为它引用了三个不同的回调变量,但您只有一个组匹配可以引用!a 和 b 的 100 和 101 值应该来自哪里,我们只能猜测。此外,您编写的正则表达式与您给出的示例不匹配,因为它有四组破折号,而不是一组。请尝试以下方法:
RewriteRule ^([-a-zA-Z0-9]+)$ /paper-ads-details.php?a=100&b=101&slug=$1 [L]
请注意,由于我以破折号开始字符类[]
,因此破折号被理解为向选项列表添加一个文字破折号,而不是像语法中那样表示其他字符之间的范围a-z
。这只因为它是第一个字符而有效。我的规则应该匹配带有任意数量破折号但不带任何句点的字符串。如果出现句点或其他字符,它应该恢复为正常的 URL 匹配。