当应用本身位于子文件夹中时访问该应用的子文件夹

当应用本身位于子文件夹中时访问该应用的子文件夹

我在一个文件夹中有一个应用程序(Symfony)rapp,我想通过 来访问example.com/rapp/

index.php文件位于rapp/public/文件夹中。

因此我希望将我的所有请求/rapp/重写为/rapp/public/index.php

经过多次阅读文档后,我得到了以下配置:

Alias /rapp/ "/var/www/html/rapp/"

<Directory /var/www/html/rapp/>

    AllowOverride None
    Order Allow,Deny

   Allow from All

    <IfModule mod_rewrite.c>

        Options -MultiViews
        RewriteEngine On
        RewriteBase /rapp

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /public/index.php/$1 [QSA,L,NC]

    </IfModule>
</Directory>

我在以下位置测试了这个配置htaccess.madewithlove.be似乎按照我的意愿重写

当我复制/粘贴结果 URL(更改 ofc example.com)时,它可以起作用,我可以访问我的应用程序,但它仍然无法使用“输入”URL http://example.com/rapp/admin/***

我的配置中缺少了什么吗?

答案1

RewriteEngine On
RewriteBase /rapp

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /public/index.php/$1 [QSA,L,NC]

这会将所有请求重写至/public/index.php(在文档根目录中)。RewriteBase此处使用的指令不执行任何操作。

您应该RewriteBase完全删除该指令,并删除RewriteRule 代换。 例如:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) public/index.php/$1 [L]

在一个目录上下文,相对的替换(无斜杠前缀)是相对于目录前缀的,即。。/var/www/html/rapp/因此,该RewriteBase指令不是必需的。

QSA和旗帜NC在这里是多余的。RewriteRule 图案- 正则表达式默认是贪婪的。

您使用链接的测试工具看到的输出.htaccess不正确。(似乎是RewriteBase错误地应用了指令。)

相关内容