2

好吧,我放弃了。我只是不能完全围绕 apache 重写,我已经查看了很多 stackoverflow 建议,但对我来说似乎没有任何意义。

所以,我有一个脚本,当前基于 www.example.com/index.php?article=some-article-name 呈现内容

但是,我希望用户认为该页面是www.example.com/section/some-article-name

我试过使用类似的东西

# Turn on URL rewriting
RewriteEngine On
RewriteRule ^/section/([a-zA-Z0-9\-]+)$ index.php?article=$1

由于所有这些人的指导,我找到了答案。

RewriteRule ^section/([a-zA-Z0-9]+)$ test.php?article=$1
RewriteRule ^section/([a-zA-Z0-9]+)/$ test.php?article=$1

您需要同时处理 2 种不同类型的请求,最后带有 / 的请求和不带 / 的请求。

4

2 回答 2

2

您可能想要一个更简单的规则,例如。

 RewriteRule ^/section/(.*) index.php?article=$1

像这样的名字some-article-name会失败,因为你不会匹配连字符。如果您想要有限的正则表达式,请尝试以下操作:

 RewriteRule ^/section/([-_.a-zA-Z0-9]+)$ index.php?article=$1

这将匹配 ASCII 字母数字字符以及最可能出现在名称中的标点符号。

如果传入请求中有参数,这些规则中的任何一个都将失败。

于 2012-12-13T00:56:08.720 回答
0

你的正则表达式是如此接近。您有一个捕获组([a-zA-Z0-9]+)正在寻找一个或多个小写字母、大写字母和/或数字,但它不寻找的是连字符。试试这个:

RewriteRule ^/section/([a-zA-Z0-9\-]+)$ index.php?article=$1

因为连字符在正则表达式中具有特殊意义,所以您需要对其进行转义。

于 2012-12-13T00:55:45.687 回答