我如何使这个mod_rewrite方案与PHP作为CGI/FCGI工作



.htaccess的内容:

Options -Indexes
RewriteEngine On
RewriteBase "/"
# Disallow direct access to PHP files.
RewriteRule ^(.*).php$ $1 [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?<!common/dispatch.php/)(.*)?$ common/dispatch.php/$1 [NS,L]

基本上我有我所有的页面(PHP文件)安排,因为他们将直接访问没有mod_rewrite,但我也有dispatch.php在一个名为common的目录,通过我希望所有的请求被定向,以便我可以做一些处理页面脚本执行之前。

这基本上与大多数框架使用的想法相同,除了我希望页面层次结构位于顶层,并且将分派脚本与其他一些零碎的东西放在自己的子目录中。

这个脚本在我的开发机器(运行PHP作为mod_php)上工作得很好,但是在生产机器上,如果在FCGI下运行,它会产生一个错误,说"没有指定的输入文件"。在正常的CGI下,它在很大程度上是有效的,但是如果,例如,我去/foo/bar(缺少尾斜杠),/foo/bar是根目录中的一个目录,它会把我送到/foo/bar/?/foo/bar。脚本的其余部分工作得很好,但我真的不希望我的uri像这样混乱,理想情况下,我也希望能够使用FCGI。

对于FCGI问题的潜在修复似乎是将匹配的$1放在查询字符串中(即?之后),但这会导致各种其他奇怪的行为,我无法修复。有一个直接的方法来解决这个问题吗?

在php中使用auto_prepend_file指令不是更容易吗?

最新更新