我想部署打包在.phar文件中的Web应用程序,并像从$_SERVER["DOCUMENT_ROOT"]
中的index.php文件中实际执行的那样处理来自它的请求。
Apache中的默认mod_rewrite
如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
如果我想对.phar文件做同样的事情(尽管我可能错了,所以任何方向都值得欢迎),我可以这样做:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /application.phar [L]
</IfModule>
我始终可以拥有两个.htaccess文件,并根据部署类型使用适当的一个。但是,如果可能的话,我想同时支持两种策略。无论我是要运行打包的应用程序还是不打包的应用程序,我都希望能够在项目之间重用.htaccess文件,但是考虑打包版本应该是首选方法。
如何将这两个不同的规则合而为一?
答案 0 :(得分:1)
像这样:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# ignore all existing files/directories from rewrite
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# if application.phar exists then use it
RewriteCond %{DOCUMENT_ROOT}/application.phar -f
RewriteRule ^ application.phar [L]
# otherwise use index.php
RewriteRule ^ index.php [L]
</IfModule>