我在一个文件夹中有一个应用程序(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
错误地应用了指令。)