2014-10-03 36 views
3

我有一個本地內部網使用mod_rewrite,它有一個用於運行用戶應用程序的框架,在某些情況下也需要mod_rewrite,但是我無法將兩者結合在一起玩。mod_rewrite在多個htaccess一起工作

我想要特定的應用程序有自己的.htaccess重寫URL,而不必擔心重寫框架需要執行。因此,應用程序應該重寫URL的一部分,並讓框架從那裏接管。

首先,代碼:

該應用程序的框架.htaccess/intranet/apps

RewriteEngine On 
RewriteRule ^([^\/]+)\/([^\/.]+)\/\?(.+)$ $1/index.php?screen=$2 [QSA,NC,L] 
RewriteRule ^([^\/]+)\/([^\/.]+)\/?$  $1/index.php?screen=$2 [QSA,NC,L] 

該應用程序特有的.htaccess/intranet/apps/myapp

RewriteEngine On 
RewriteOptions inherit 
RewriteRule ^export\/([0-9]+)\/?$ export/?pid=$1 [QSA,NC,L] 

此應用具有輸出功能,其接受某個ID進行處理。因此,要打破下來:

URL:由.htaccess的應用程序特定的www.intranet.com/apps/myapp/export/?pid=99

www.intranet.com/apps/myapp/export/99

應該重寫

URL。 現在,該框架應接管:

URLwww.intranet.com/apps/myapp/export/?pid=99

URLwww.intranet.com/apps/myapp/index.php?screen=export&pid=99

我的應用程序工作得很好,所以框架不會重寫,因爲它應該,但是一旦應用程序特定的重寫進入遊戲,該頁面就會崩潰並丟回404

就我的理解,這個場景首先處理特定於應用程序的重寫,然後通過RewriteOptions inherit,接下來處理父級的重寫。

令人沮喪的是,在應用程序特定的.htaccess中只有RewriteEngine on就足以將其分解爲位。我明顯錯過了一些東西,但我似乎無法解決問題。

回答

2

問題可能是繼承的規則在myapp的上下文中不起作用。 myapp內部需要^([^\/.]+)\/?$正則表達式,因爲應用於這些規則的URI將是export/,而不是myapp/export/(因爲規則在myapp之內)。

因此,無論內容添加到應用程序框架的htaccess文件(在文件的結尾)或一個在myapp

RewriteCond %{REQUEST_FILENANE} !-f 
RewriteCond %{REQUEST_FILENANE} !-d 
RewriteRule ^([^\/.]+)\/?$ index.php?screen=$1 [QSA,L] 
+0

這正是我需要的;我把它放在應用程序框架htaccess中,所以應用程序開發者不必擔心它,並且像魅力一樣工作。 – Pantalaimon 2014-10-04 08:47:06

相關問題