通过 mod rewrite 将帖子标题设为 url 中的 slug

通过 mod rewrite 将帖子标题设为 url 中的 slug

我之前发过一个问题,但对答案不满意。例如,我有一个网址

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 匹配。

相关内容