将请求重写到子目录

时间:2014-02-28 11:55:41

标签: php apache .htaccess mod-rewrite url-rewriting

我在一个名为xyz的目录中有一个Web应用程序。我正在尝试将所有请求重定向到子目录www。我目前的.htaccess代码是:

RewriteEngine On
RewriteRule (.*) /www/$1 [L]

但是,当我访问http://example.com/xyz/some_url时,请求会被重定向到我想要的http://example.com/www/some_url而不是http://example.com/xyz/www/some_url

更新:抱歉,我忘了提及xyz目录,因为在我的情况下可能会重命名。因此,此目录不需要在重写规则

中进行硬编码

4 个答案:

答案 0 :(得分:2)

将此规则放在/xyz/.htaccess

RewriteEngine On
RewriteBase /xyz/

RewriteRule ^((?!www/).*)$ www/$1 [L,NC]

答案 1 :(得分:1)

如果您的DocumentRoot不包含xyz路径,那么您需要在RewriteRule中指定。

例如:RewriteRule (.*) /xyx/www/$1 [L]

答案 2 :(得分:1)

我认为这应该有效或接近:

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)/([^/]+)$ $1/www/$2 [L]

答案 3 :(得分:1)

使用相对路径和两个.htaccess文件

您只需要删除前导/重写到相对于当前文件夹的网址:

# /xyz/.htaccess
RewriteEngine on
RewriteRule    (.*) www/$1    [L]

这会将/xyz/foo重写为/xyz/www/foo

要防止重定向循环,请将.htaccess文件添加到www子文件夹,例如:

# /xyz/www/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

适当调整。