基本的mod_rewrite / regex问题:用破折号拆分ID

时间:2010-11-11 11:30:25

标签: regex apache mod-rewrite

我正在尝试为更清晰的URL做一些htaccess重定向,但我没做到。

这是我的意图:

/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

“blah”这个词可以包含Unicode字符,如ç,ö,ğ,ş等(这意味着[a-z0-9_]在我的情况下不起作用)

我如何达到预期的效果?我尝试了各种各样的事情但没有成功感谢。

2 个答案:

答案 0 :(得分: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 }。每对parantheses都是重要的,因此$3-123,而$4123

\p表示unicode字符,{L}表示字母。您可以在PHP PCRE regex - Unicode character properties查看可用的修饰符。要使用它们,必须使用--enable-unicode-properties编译PHP版本。

答案 1 :(得分:0)

我最终得到了Alin和Battal评论的“混合”解决方案。

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

它有效。 谢谢!