2012-01-19 83 views
1

我有這樣的文件夾結構:如何使用.htaccess更改REQUEST_URI?

/www/project/web/app.php

我可以通過/project/web/index.php訪問它。問題是我不想將web/作爲URL的一部分。它應該是/project/index.php

有了這個的.htaccess中/www/project/文件夾:

RewriteEngine敘述在

重寫規則^(。*)$網絡/的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] 

訪問URL /project/foo/bar正確地重新路由到index.php,但由於REQUEST_URI包含/project/foo/bar而不是/foo/bar應用程序失敗。 project是一個文件夾,不應該是請求的一部分。

回答

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] 
3

要更改URI,您必須使用R標誌進行重定向,您的當前規則將僅在內部重定向,從而保持相同的URI。