Apache RewriteRule规则

时间:2012-12-13 00:46:02

标签: php apache .htaccess

好吧,我放弃了。我只是不能完全围绕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 个答案:

答案 0 :(得分:2)

您可能需要更简单的规则,例如。

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

some-article-name之类的名称将失败,因为您将不匹配连字符。如果你想要一个有限的正则表达式尝试类似:

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

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

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

答案 1 :(得分:0)

您的RegEx非常接近。你有一个捕获组([a-zA-Z0-9]+)正在寻找一个或多个小写字母,大写字母和/或数字,但它没有找到的是一个连字符。试试这个:

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

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