我使用 PHP 作为 Apache 模块,而不是 CGI。对特定虚拟主机发出的每个请求都应导致 PHP 脚本的执行(“/srv/web/init.php”),我这样做如下:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /srv/web/
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/init\.php$
RewriteRule .* /init.php [L]
</VirtualHost>
此虚拟主机除了执行 init.php 并将其输出返回给 Apache 以获得响应外,没有其他用途。我的问题是是否有更干净的方法来执行此操作 - 即绕过 Apache 的文件系统模拟,这样就不需要“公共”文件夹,因此 mod_rewrite 也没有必要。与调用 CGI 脚本非常相似,它会像这样:
<VirtualHost *:80>
ServerName example.com
PHPScript /srv/web/init.php
</VirtualHost>
我删除了上面的 DocumentRoot 指令,因为我的建议会使它变得毫无用处。我是不是只想将 Apache 模块变成 CGI,我应该只使用 CGI 吗?
答案1
不,您不能直接调用 PHP 脚本。您可以执行以下操作:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /srv/web/
DirectoryIndex init.php
</VirtualHost>
答案2
不,
PHPScript 不是您可以使用的 Apache 指令。 http://httpd.apache.org/docs/2.2/mod/directives.html
您必须将该文件设为默认索引或对其进行 mod_rewrite。
答案3
您需要将该 php 文件设为默认索引文件,然后将其作为该站点上所有其他内容的前端控制器运行,这样所有 url 都将是 example.com/index.php/whatever - 您可以进行重写,将 index.php 部分隐藏给最终用户,但它仍然会在那里指导事情。