【发布时间】:2014-10-04 07:54:42
【问题描述】:
我有一个使用 mod_rewrite 的本地 Intranet,它有一个运行用户应用程序的框架,在某些情况下也需要 mod_rewrite,但我无法将两者结合使用。
我希望特定的应用程序有自己的.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]
/intranet/apps/myapp 中特定于应用的.htaccess:
RewriteEngine On
RewriteOptions inherit
RewriteRule ^export\/([0-9]+)\/?$ export/?pid=$1 [QSA,NC,L]
此应用具有导出功能,可以接受特定 ID 进行处理。所以,分解一下:
网址:www.intranet.com/apps/myapp/export/99
应该改写成
网址:www.intranet.com/apps/myapp/export/?pid=99
通过特定于应用程序的.htaccess。
现在,框架应该接管:
网址:www.intranet.com/apps/myapp/export/?pid=99
到
网址:www.intranet.com/apps/myapp/index.php?screen=export&pid=99
我的应用运行良好,因此框架会按应有的方式进行重写,但是一旦特定于应用的重写进入游戏,该页面就会崩溃并返回 404
据我了解,此方案首先处理特定于应用程序的重写,然后由RewriteOptions inherit 处理父级的重写。
令人沮丧的部分是,仅在特定于应用程序的.htaccess 中包含RewriteEngine on 就足以将其分解为位。我显然遗漏了一些东西,但我似乎无法解决。
【问题讨论】:
标签: apache .htaccess mod-rewrite url-rewriting