好吧,我放弃了。我只是不能完全围绕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
您需要同时处理两种不同类型的请求,其中包含一个/最后一个请求,另一个不需要。
答案 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
因为连字符在正则表达式中具有特殊意义,所以你需要将其转义。