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

Apache 如何在将根文件夹重定向到子文件夹后保持URL显示不变,apache,mod-rewrite,redirect,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$ Re

我想将所有到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就不会有尾随斜杠(这是我想要的)。但是,重写cond%{REQUEST_FILENAME}-f似乎什么也不做,而是重写cond%{REQUEST_URI}!。+$是必需的。

如果您想避免在URL中添加“live”,听起来您想要的不是重定向,而是反向代理

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以首先进入,并在继续之前将其推送到浏览器。然后,当请求返回时,我只是在根目录上添加index.html强制,并在/blog上添加catch,但不带尾随斜杠。希望能有所帮助。

谢谢!几乎完美,唯一的一件事是,我想添加一个尾随斜杠到每个子文件夹,而不仅仅是“博客”。我在上面用你的修改加上我的另一个修改编辑了我的帖子,以获得这个功能。它现在可以工作了,但是我正在使用条件RewriteCond%{REQUEST_FILENAME}-f并重写cond%{REQUEST_URI}!(.*)/$以防止向直接指向文件名(如/subfolder/page.html)的URL添加尾随斜杠。我很困惑,因为我认为我只需要第一条规则就可以实现这一点,但单靠第一条规则并没有任何作用。