我的問題是關於使用SetEnvIf
以及我如何才能正確使用環境變量,因爲我需要它們。我將解釋我需要做什麼,然後我已經有...Apache SetEnvIf和使用%{ENV:...}
我需要在我的htaccess文件中設置PHP應用程序目錄,因爲一些重寫規則使用該目錄名稱,我試圖以允許管理員用戶改變它的能力。它目前在php中設置,並且在htaccess文件中手動完成更改,然後再次在php中完成。要做到這一點,我現在有
SetEnvIf SERVER_PROTOCOL ".*" APP_DIR=application
它設置了這種方式來獲得之前的任何重寫規則的環境變量設置如下(使用ENV關於採取建議瓦爾在重寫規則),作爲SetEnv
被任意重寫後處理規則,而之前處理SetEnvIf
。
現在我可以使用%{ENV:APP_DIR}
在改寫條件下訪問APP_DIR
,第二部分是任何重寫規則。
我需要實現的是比這更復雜一點,因爲應用程序目錄不存在,而是讓PHP應用程序知道作爲後端而不是前端進行處理的重定向,例如目前重寫(不ENV VAR)是
### ADMIN REWRITE
RewriteRule ^application\/?$ index.php?mode=administration&%{QUERY_STRING} [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^application(\/(.*\/?))?$ index.php?page=$1&mode=administration&%{QUERY_STRING} [NC,L]
### FRONTEND REWRITE - Will ignore files and folders
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*\/?)$ index.php?page=$1&%{QUERY_STRING} [L]
所以,你很可能會看到,我需要能夠替代application
爲APP_DIR
,讓系統管理員更改路徑,所以它可能是cms
或admin
等。
不幸的是,以下納克將不起作用
### ADMIN REWRITE
RewriteRule ^%{ENV:APP_DIR}\/?$ index.php?mode=administration&%{QUERY_STRING} [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^%{ENV:APP_DIR}(\/(.*\/?))?$ index.php?page=$1&mode=administration&%{QUERY_STRING} [NC,L]
### FRONTEND REWRITE - Will ignore files and folders
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*\/?)$ index.php?page=$1&%{QUERY_STRING} [L]
%{ENV:APP_DIR}
不能在重寫的正則表達式中使用,作爲正則表達式是任何重寫之前被處理,並且將env瓦爾。
有沒有人達到我所需要的?即使這意味着在某種程度上調整重寫邏輯,它可以完成嗎?我必須說明重寫後的PHP邏輯不能改變,因爲如果是現有的系統,它會有向後兼容性問題。
你知不知道,這仍然困擾着我,而我從未從這個角度想過它。 – designermonkey 2013-08-05 09:49:14