2017-07-24 73 views
1

我在我的一個htdocs文件夾中的.htacess文件夾裏面做了一個rewriterule。 的重寫規則看起來是這樣的:如何找到第20個正則表達式匹配組?

RewriteRule ^index/(blah)/(blah2)/(blah3)..../(blah20) 

^^^上面的代碼看起來像不好的做法 - 關於不要擔心。 不管怎麼說,我之前聽說$ {20}是以正則表達式訪問第20個匹配組的正確方法,但即使在regex101中,我的第20個匹配組也匹配blah20,每當我打印第20個捕獲組時, {20}。 這是爲什麼?我能正確訪問兩位數的匹配組嗎?

編輯 - 真正的重寫規則:

RewriteRule ^a/([\d]*)/(b/([\d]{2}:[\d]{2}:[\d]{2})/?)?(c/(\w*)/?)?(d/([\w] 
{6})/?)?(e/([\w]{6})/?)?(f/([\w]{6})/?)?(g/([\w]{6})/?)?(h/([\w]{6})/?)? 
(i/([\w]{6})/?)?(j/([\w]{6})/?)?(k/([\w]{6})/?)?(l/([\w]{6})/?)?(m/([\w] 
{6})/?)? /index.php?a=$1&b=$3&c=$5&d=$7&e=$9&f=${11}&g=${13}&h=${15}&i=${17}& 
j=${19}&k=${21}&l=${23}&m=${25} [L] 
+0

'每當我打印出來的20捕獲組合 - 你如何印刷它? – anubhava

+0

RewriteRule^index /(blah)/(blah2)/(blah3).... /(blah20) /index.php?id=$1¶m2=$2¶m3=$3 ...然後打印出索引中的網址.php從$ _REQUEST全局變量。由於參數20 = 20美元,我知道第20個捕獲組是什麼。 –

+0

請參閱下面的答案。超過$ 9的任何內容都不受支持。 – anubhava

回答

0

您不能使用大於9的反向參考號碼。

從手冊:

重寫規則的反向引用:這些形式$N (0 <= N <= 9)的反向引用。 $1$9提供對該模式的分組部分(在括號中)的訪問,從RewriteRule中受限於當前的RewriteCond條件集。 $0提供對該模式匹配的整個字符串的訪問。

如果你正在處理如此多的反向引用那麼最好是index/後,通過完整的URI index.php和使用PHP代碼中的爆炸:

RewriteRule ^index/(.+)$ index.php?q=$1 [L,QSA,NC] 
+0

如何將我的RewriteRule分解爲多個重寫規則@anubhava?如果你能告訴我,我會很樂意接受你的答案。謝謝George Chen –

+0

可以這樣做,但是如果你正在處理那麼多的後向引用,那麼最好在'index /'後面傳遞完整的URI到'index.php'並在php代碼中使用'explode'。 – anubhava

+1

好吧,我知道這樣的事情會更好:https://stackoverflow.com/questions/17246714/php-pass-url-to-index-php;你能解釋一下如何去做更麻煩的方法 - 即多重寫規則嗎?我非常好奇直覺的解釋@anubhava。 –

0

例如像this

RewriteRule \^index(?:\/\w+){5}\/(blah6) 

將在URL匹配6日的文件夾。

+0

這不完全是我的意思。我的意思是我將如何使用$#符號找到第20個比賽組。您可以使用$ 1訪問.htaccess中的第一個匹配組。你將如何訪問.htaccess中的第20個比賽組?我聽說你這樣做...... $ {20},但那種表示方式現在還不適合我。 –