簡體   English   中英

有人可以解釋這種奇怪的mod_rewrite正則表達式行為

[英]Can someone explain this strange mod_rewrite regex behavior

我一直在研究用於調試mod_rewrite的腳本,並且在測試其regex系統時,我得到了一些奇怪的結果。 我想知道這是否是mod_rewrite regex引擎的正常行為,還是我的代碼中的某些部分導致了這種情況。

要求的網址: http://myurl.com/path/to/something : http://myurl.com/path/to/something

.htaccess具有: RewriteRule to where

使用我的調試系統,使用RewriteRule時,將發生以下情況:

path/to/something -> where/to/something

不應該是path/where/something

這是完整的.htaccess文件

RewriteEngine開

RewriteBase / ModRewriteTester

RewriteRule。*-[E = ORIG:$ 0]

RewriteRule到哪里

RewriteRule。*-[E = MODD:$ 0]

RewriteRule。* index.php

然后,我有一個php腳本正在讀取環境變量$_SERVER['REDIRECT_ORIG']$_SERVER['REDIRECT_MODD'] ,這就是我獲取先前聲明的路徑的地方。

如果有人知道更好的方法來明確顯示mod_rewrite的regex引擎如何工作,我會接受的。 最初的問題仍然存在...

您的規則:

RewriteRule to where

... ...將重寫相匹配網址,並用替換URL它代表什么將是/凡有要求。 在某些情況下,mod_rewrite可能會嘗試重新添加Apache認為是PATH_INFO的內容 ,這可能會導致如下情況:

path/to/somewhere  -> PATH_INFO = /to/somewhere
path/to/somewhere  -> /where
(append PATH_INFO) -> /where/to/somewhere

要檢查您的方案是否存在這種情況,可以將DPI標志添加到RewriteRule以丟棄PATH_INFO(如果存在)。 看起來像這樣:

RewriteRule to where [DPI]

在這種情況下,您最終只會得到URL / where 如果您想在保留其余URL的同時替換 則需要一個類似以下的規則:

RewriteRule (.*?/)?to(/.*)? $1where$2

就調試規則集而言,如果可以訪問Apache配置,則最好使用RewriteLog指令和足夠高的RewriteLogLevel 如果您無權訪問該配置,則您將只能做與現在嘗試類似的事情。

暫無
暫無

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

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