Mod rewrite 重定向到子文件夹时始终保留URL

Mod rewrite 重定向到子文件夹时始终保留URL,mod-rewrite,url-rewriting,apache2,Mod Rewrite,Url Rewriting,Apache2,我想将所有请求重定向到服务器(/app)上的某个路径,并重定向到/app/app_站点的子目录。以下重写规则对“”之类的请求执行此操作: 这将生成正确的页面,同时保留URL。此外,“”将在/app/app_site/index.html获取索引页,同时保留URL“” 但是,当我输入“”时,会发生以下情况: 在/app/app_site/index.html获取正确的页面 然而,URL被重定向到“” 我就快到了,但我希望在所有情况下都保留URL(也包括那些没有尾部斜杠的情况)。有人知道怎么做吗

我想将所有请求重定向到服务器(/app)上的某个路径,并重定向到/app/app_站点的子目录。以下重写规则对“”之类的请求执行此操作:

这将生成正确的页面,同时保留URL。此外,“”将在/app/app_site/index.html获取索引页,同时保留URL“”

但是,当我输入“”时,会发生以下情况:

  • 在/app/app_site/index.html获取正确的页面
  • 然而,URL被重定向到“”

我就快到了,但我希望在所有情况下都保留URL(也包括那些没有尾部斜杠的情况)。有人知道怎么做吗?谢谢

这是启用时的预期行为,因为您已重写到缺少尾部斜杠的目录,
mod_dir
在使用
mod_rewrite
重写URL后执行此清理

最简单的解决方案是重写URL,使其始终至少与以斜杠结尾的目录路径匹配,如下所示:

RewriteCond %{REQUEST_URI} !^/app/app_site.*$
RewriteCond %{REQUEST_URI} !^/app_site.*$
RewriteRule ^/app/?(.*)$     /app/app_site/$1 [L,PT]

这可以防止
mod_dir
必须添加尾随斜杠,从而避免您现在遇到的外部重定向到
/app/app_site/

这是启用时的预期行为,因为您已重写到缺少尾随斜杠的目录,在您使用
mod_rewrite
重写URL后,
mod_dir
将执行此清理

最简单的解决方案是重写URL,使其始终至少与以斜杠结尾的目录路径匹配,如下所示:

RewriteCond %{REQUEST_URI} !^/app/app_site.*$
RewriteCond %{REQUEST_URI} !^/app_site.*$
RewriteRule ^/app/?(.*)$     /app/app_site/$1 [L,PT]

这可以防止
mod_dir
添加尾随斜杠,从而避免您现在体验的外部重定向到
/app/app_site/

太好了,非常感谢!这就像这个例子中的一个符咒。然而,我的真实应用程序仍然存在问题。我简化了这个例子,但实际上,/app是通过Tomcat通过mod_jk提供的Cocoon应用程序。现在,每当我激活mod_jk指令时,“”和“”都会被重写为“”(不过,所有具有进一步路径的URL都会被保留)。你知道是什么导致了这种干扰以及如何解决它吗?它们被重写的意思是用户的浏览器中的URL被更改了?你是如何定义你的
mod_jk
处理器的?嗨,蒂姆,我已经调查了这个问题,你的回答让我走上了正确的轨道。我没有为mod_jk处理器配置特殊选项;只有一条规则:/app |/*=ajp13。我意识到我的cocoon应用程序的sitemap.xmap也指定了一个重定向,用于在请求空路径(“/app/”)时为默认主页提供服务:这会将请求传递给另一个cocoon管道。实际上,这相当于外部重定向,导致URL('/app/')被重写为'/app/appindex.xml'。[…][…]当然,当通过mod_jk提供服务时,此重定向发生在mod_rewrite重写的URL上,导致“”被重写为“”。我可以通过将cocoon重定向指定为内部重定向来解决这个问题,方法是在“cocoon:/”模式前面加前缀:这起作用:它在服务/app/app_site/appindex.xml时保留URL“”。所以,再次感谢你!只要我有足够的学分,我就会投票支持你的答案。太好了,非常感谢!这就像这个例子中的一个符咒。然而,我的真实应用程序仍然存在问题。我简化了这个例子,但实际上,/app是通过Tomcat通过mod_jk提供的Cocoon应用程序。现在,每当我激活mod_jk指令时,“”和“”都会被重写为“”(不过,所有具有进一步路径的URL都会被保留)。你知道是什么导致了这种干扰以及如何解决它吗?它们被重写的意思是用户的浏览器中的URL被更改了?你是如何定义你的
mod_jk
处理器的?嗨,蒂姆,我已经调查了这个问题,你的回答让我走上了正确的轨道。我没有为mod_jk处理器配置特殊选项;只有一条规则:/app |/*=ajp13。我意识到我的cocoon应用程序的sitemap.xmap也指定了一个重定向,用于在请求空路径(“/app/”)时为默认主页提供服务:这会将请求传递给另一个cocoon管道。实际上,这相当于外部重定向,导致URL('/app/')被重写为'/app/appindex.xml'。[…][…]当然,当通过mod_jk提供服务时,此重定向发生在mod_rewrite重写的URL上,导致“”被重写为“”。我可以通过将cocoon重定向指定为内部重定向来解决这个问题,方法是在“cocoon:/”模式前面加前缀:这起作用:它在服务/app/app_site/appindex.xml时保留URL“”。所以,再次感谢你!只要我有足够的学分,我就会投票支持你的答案。