创建Apache mod重写规则以处理对子目录的所有请求

时间:2012-01-15 20:04:12

标签: apache .htaccess mod-rewrite redirect

我想将所有传入的请求重定向到子目录,但无法弄清楚如何。我看了here,但那对我不起作用。

因此,如果有人访问www.example.com/test,我希望将其重定向到:www.example.com/test/subdirectory,但网址仍需www.example.com/test

我还需要使用参数,例如www.example.com/test/index.php?action=home必须重定向到www.example.com/test/subdirectory/index.php?action=home

我希望有人可以帮助我!

2 个答案:

答案 0 :(得分:1)

尝试将以下内容添加到站点根目录中的.htaccess文件中。 默认情况下会传递查询字符串参数。

RewriteEngine on
RewriteBase /

#if not an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# rewrite to subdirectory
RewriteRule ^(.*)(/[^/]+)?$ /$1/subdirectory/$2 [L,QSA]

答案 1 :(得分:1)

所以实际上你要求的不是重定向。

重定向意味着网络服务器将发送包含子目录的新网址,然后浏览器将请求此新网址,并将其显示在浏览器的网址栏中。

你想要的是将目录结构顺序映射到不同的真实目录结构。这就是Apache可以使用Alias指令轻松完成的工作。 Mod-rewrite也可以这样做,RewriteRules不包含[R]标签,这意味着内部重写,而不是重定向HTTP响应。 [QSA]标记还会告诉mod-rewrite将当前查询字符串参数保留在重写的url上。但Mod-rewrite并不总是很容易理解,而且你的问题对于基本的Alias来说很简单,它基本上都包含在Apache中(通常比mod-rewrite更多)。

这应该没问题:

Alias /test /test/subdirectory