如何使用.htaccess更改REQUEST_URI?

时间:2012-01-19 08:18:13

标签: apache .htaccess

我有这个文件夹结构:

  

/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/barproject是一个文件夹,不应该是请求的一部分。

2 个答案:

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