我正在尝试为更清晰的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_]在我的情况下不起作用)
我如何达到预期的效果?我尝试了各种各样的事情但没有成功感谢。
答案 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
,而$4
为123
。
\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]
它有效。 谢谢!