.htaccess-在.phar文件上提供请求,如果找到,则在index.php上提供

时间:2018-11-29 15:24:59

标签: .htaccess phar

我想部署打包在.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文件,但是考虑打包版本应该是首选方法。

如何将这两个不同的规则合而为一?

1 个答案:

答案 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>