将根文件夹重定向到子文件夹后如何保持URL显示不变

时间:2010-01-17 08:53:38

标签: apache mod-rewrite redirect

我想将所有查询重定向到mydomain.com到mydomain.com/live/。我已经能够做到这一点,但是我在浏览器中显示的URL时遇到了问题。我有两个目标,(1)URL总是在前面用“www”呈现,(2)子文件夹“live”没有显示在url中。

编辑:基于Cryo编辑的代码,以下内容实现了我的目标,并在所有子文件夹之后添加了一个尾部斜杠,这样当在url中输入文件夹时,它就会正确地转发到其中的index.html:

RewriteCond %{HTTP_HOST} !^www\.domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^$ /index.html

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1

问题但是,当向子文件夹添加尾部斜杠时,我假设RewriteCond%{REQUEST_FILENAME}! - f会使它在文件名(仅文件夹)之后没有添加斜杠,所以/subfolder/page.html会没有尾部斜杠(这就是我想要的)。但RewriteCond%{REQUEST_FILENAME}!-f似乎什么都不做,RewriteCond%{REQUEST_URI}!.. + $是必需的。

2 个答案:

答案 0 :(得分:1)

RewriteCond %{HTTP_HOST} !^www\.georgemitra\.com$
RewriteRule ^(.*)$ http://www.georgemitra.com/$1 [R=301,L]

RewriteRule ^$ /index.html
RewriteRule ^blog$ /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1

你几乎拥有它。我将www子域catch-all先移动并将其推送到浏览器,然后再继续。然后当请求返回时,我刚刚在root上添加了index.html force,在没有尾部斜杠的情况下添加了/ blog的catch。希望有所帮助。

答案 1 :(得分:0)

如果你想避免在网址中加入'live',那么听起来你想要的不是重定向,而是反向代理。