我有这个文件夹结构:
/www/project/web/app.php
我可以通过/project/web/index.php
访问它。问题是我不希望web/
作为URL的一部分。它应该是/project/index.php
。
使用/www/project/
文件夹中的.htaccess:
RewriteEngine On
RewriteRule ^(。*)$ web / index.php [L]
当通过/project/foo/bar
访问时,它似乎重新路由到正确的文件,然而,REQUEST_URI保持不变并且/project/index.php/foo/bar
打破了很多东西。
如何将REQUEST_URI更改为不包含project
?
简单地说:
/www/project/.htaccess
RewriteEngine On
RewriteRule ^(.*)$ web/index.php [L]
正确访问网址/project/foo/bar
会重新路由到index.php
,但应用程序失败,因为REQUEST_URI包含/project/foo/bar
而不是/foo/bar
。 project
是一个文件夹,不应该是请求的一部分。
答案 0 :(得分:2)
要更改URI,您必须使用R
标志进行重定向,您当前的规则将仅在内部重定向,从而保持相同的URI。
答案 1 :(得分:2)
尝试将以下内容添加到/www/project/.htaccess
RewriteEngine on
RewriteBase /project/
#first, if project/web or web or just project is present, redirect and remove them
RewriteRule ^(project/web/|web/|project/)(.*)$ $2 [L,R=301]
#next, rewrite all requests to web/index.php
RewriteRule ^(.*)$ web/index.php [L]