2 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
該[L]
規(guī)則工作正常-你只是不知道它是如何實(shí)際工作的。
當(dāng)Apache看到[L]
標(biāo)志和規(guī)則匹配(重寫發(fā)生)時(shí),Apache將進(jìn)入下一次迭代,并將從頂部再次開始匹配所有規(guī)則。該[L]
標(biāo)志表示“ 在此迭代中不處理以下任何規(guī)則”。
是的,Apache文檔并沒有100%明確(這意味著它可以改進(jìn)),但提供了足夠的信息來最終弄清楚。
Apache將在幾種情況下停止重寫周期:
沒有匹配的規(guī)則(沒有重寫);
“立即退出”規(guī)則匹配(例如
RewriteRule .* - [L]
);重寫發(fā)生,但輸入U(xiǎn)RL和最終URL是相同的(當(dāng)“嚴(yán)重”編寫的規(guī)則將相同的URL重寫到同一URL時(shí),在第2到第3次迭代時(shí)發(fā)生。
例如
RewriteRule (.*) /index.php?page=$1 [L]
:/hello
=>/index.php?page=hello
在下一次迭代中,它將重寫
/index.php
=>/index.php?page=index.php
并且在第3次迭代時(shí)它將是
/index.php
=>/index.php?page=index.php
..現(xiàn)在沒有意義);達(dá)到重寫迭代限制(默認(rèn)值= 10) - 如果您輸入了無限重寫周期(該值由LimitInternalRecursion指令控制)。
根據(jù)上述所有信息,我可以說 您當(dāng)前的規(guī)則確實(shí)按預(yù)期工作。這意味著你必須改變邏輯并擺脫最后一條規(guī)則(也許在父.htaccess中處理這一時(shí)刻......或者以不同方式處理它 - 所有這些都取決于你的應(yīng)用程序是如何構(gòu)建的,我不想做出瘋狂的猜測)。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
把它擺在你的cath all
規(guī)則面前。
RewriteCond %{ENV:REDIRECT_STATUS} !=200
問題是,一旦處理了[L]標(biāo)志,確實(shí)忽略了所有下一個(gè)RewriteRules,但是,文件從begin開始處理AGAIN,現(xiàn)在使用新url。
catch all
如果文件已經(jīng)重定向,這個(gè)神奇的條件將不會(huì)處理。
PS:如果它不工作,你可能需要調(diào)整條件的位:200
,!=200
,^.
,^$
。
顯然,變量設(shè)置200
為重定向,但其他頁面(錯(cuò)誤和填充)將其設(shè)置為某個(gè)值?,F(xiàn)在,這意味著你要么如果它檢查is empty
,is not empty
,is 200
或者is not 200
,這取決于你所需要的。
添加回答
舉報(bào)