簡體   English   中英

基本的mod_rewrite / regexp問題:使用破折號分割ID

[英]basic mod_rewrite / regexp question: Split ID with dash

我正在嘗試為更清潔的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_]在我的情況下將不起作用)

我怎樣才能達到預期的結果? 我嘗試了各種事情,但沒有成功。 謝謝。

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正則表達式-Unicode字符屬性中看到可用的修飾符。 要使用它們,您的PHP版本必須使用--enable-unicode-properties進行編譯。

我最后得到了Alin和battal的評論的“混合”解決方案。

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

而且有效。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM