2009-10-13 170 views
2

只是无法确定这些正则表达式。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/他shlould被 重定向到 www.mydomain.com/index.php
  • 如果访问者访问 www.mydomain.com/news/test-slug或 www.mydomain.com/news/test-slug/他 shlould被重定向到 www.mydomain.com/index.php?news=test-slug
  • slu only只包含字母(AZ 和az),数字(0-9)和破折号 “ - ”,所以我需要 正确的正则表达式这

有人可以帮助我建立正确的重写?

回答

2

你可以用这个规则总结你的前两个规则:

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

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

+0

我改变了我的htaccess的你提供这两个规则: 重写规则(+)/ $/$ 1 [L,R = 301]和 重写规则^新闻/([ - A-ZA-Z0-9] +)$ index.php?news = $ 1 [L] 但是当我去mydomain.com/news时,我得到一个404错误.. – Bundy 2009-10-13 20:01:04

0

这可能工作

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