[英]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.