2010-11-11 26 views
0

我試圖做一些htaccess重定向更清潔的URL,但我沒有做到。基本mod_rewrite /正則表達式問題:拆分ID與破折號

這裏是我的打算:

/kitap/blah  => kitap.php?a=blah 
/kitap/blah-123 => kitap.php?a=blah&b=123 

這是我當前的代碼。

RewriteRule ^(kitap|yazar)/?([^/\.]+)?(-([0-9]+))?/?$ $1.php?a=$2&b=$3 [QSA,L,NC] 

目前,它產生這樣的:

/kitap/blah  => kitap.php?a=blah 
/kitap/blah-123 => kitap.php?a=blah-123 

單詞 「等等」 可以包括Unicode字符,如C,O,G,S等。(這意味着[A-Z0-9_]將不適合我的情況)

我該如何實現預期的效果?我嘗試了各種各樣的東西,但沒有成功謝謝。

+0

難道你不能在'[^/\。]'裏面加'-'嗎? – 2010-11-11 11:44:29

回答

0

我最終得到了來自Alin和battal評論的「混合」解決方案。

RewriteRule ^(kitap|yazar)/?([^/\.-]+)?(-([0-9]+))?/?$ $1.php?a=$2&b=$4 [QSA,L,NC] 

它的工作原理。 謝謝!

0
RewriteRule ^(kitap|yazar)/?([^/\.-]+)?(-(\d+))?/?$ $1.php?a=$2&b=$4 [QSA,L,NC] 

RewriteRule ^(kitap|yazar)/?(\p{L}+)?(-(\d+))?/?$ $1.php?a=$2&b=$4 [QSA,L,NC] 

$4,不$3除非你打算使用破折號-,如果使用$3$_GET['b']將等於-123。每一對缺口都計數,所以$3-123,而$4123

\p表示一個unicode字符,而{L}表示一個字母。你可以在PHP PCRE regex - Unicode character properties看到可用的修飾符。要使用它們,您的PHP版本必須編譯爲--enable-unicode-properties

+0

這並不完全正確。 '\ p'不代表一個Unicode字符。它意味着具有以下屬性的一個角色。 – tchrist 2010-11-11 12:20:38

+0

是的,但它是唯一支持unicode的特殊類,僅在Unicode環境中使用。只需查看相關手冊頁面的網址即可。否則,它不會和'\ w'有任何不同。是的,'\ p'是一個unicode字符,它包含unicode平面。 – 2010-11-11 12:54:03

相關問題