Htaccess,mod_rewrite和仅用于字母数字和短划线的正则表达式

时间:2009-10-13 19:46:19

标签: regex .htaccess mod-rewrite

无法想出那些正则表达式。

我有一个带有一些网址重写的.htaccess文件。看看我现在拥有的东西:

RewriteRule ^news news/ [R]
RewriteRule ^news/([-A-z0-9]+)/$ news/$1 [R]
RewriteRule ^news/([-A-z0-9]+)$ index.php?news=$1 [L]

我不认为这是正确的,我的意思是我认为它会更好。

这是他们必须做的事情。

  • 如果访客访问 www.mydomain.com/news或 www.mydomain.com/news/他应该是 重定向到 www.mydomain.com/index.php
  • 如果访客访问 www.mydomain.com/news/test-slug或 www.mydomain.com/news/test-slug/他 应该被重定向到 www.mydomain.com/index.php?news=test-slug
  • slu只只包含字母(A-Z 和a-z),数字(0-9)和破折号 “ - ”,所以我需要一个正确的正则表达式 此

有人可以帮我构建正确的重写吗?

2 个答案:

答案 0 :(得分:2)

您可以使用此规则汇总前两个规则:

 RewriteRule (.+)/$ /$1 [L,R=301]

这将从请求中删除尾部斜杠。而你的第三条规则看起来很好。预计范围A - z不会只包含范围A - Z(0x41-0x5A)和a - z( 0x61-0x7A)以及这两个范围之间的字符[\]^=和``. I would use [ -A-Za-z0-9]`而不是。

答案 1 :(得分:0)

这可能有效

RewriteRule ^/news(/)(.+)$ /index.php?news=$2 [L]