2009-10-13 118 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] 
相關問題