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

时间:2011-08-01 13:04:40

标签: php apache .htaccess url mod-rewrite

这是.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是docroot中的目录,它会将我发送到{{1} }。脚本的其余部分工作正常,但我真的不希望我的URI像这样被破坏,理想情况下我也希望能够使用FCGI。

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

1 个答案:

答案 0 :(得分:0)

在php中使用auto_prepend_file指令会不容易?