在代理通过之前在浏览器中重定向URL

时间:2014-08-27 00:14:09

标签: apache mod-rewrite mod-proxy

我正在尝试从所有网址中删除尾部斜杠并重定向。

我在这里完成了这个:

<Directory /var/www/html/ >
  RewriteEngine on
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.+[^/])/$ ${BaseUrl}/$1 [R=301,L]
</Directory>

但是,我也在本地运行服务,并希望代理访问/ $ {ServiceRoot}。

ProxyPass /${ServiceRoot} http://localhost:${ServicePort}/
ProxyPassReverse /${ServiceRoot} http://localhost:${ServicePort}/

每个都可以单独使用。但是,如果我尝试访问这样的网址:${BaseUrl}/${ServiceRoot}/some/path/

尾部斜线保持打开状态。我想强制重定向,以便浏览器中的URL显示没有斜杠。

提前致谢!

2 个答案:

答案 0 :(得分:0)

只需从RewriteRule中删除L:

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.+[^/])/$ ${BaseUrl}/$1 [R=301]

这应该将规则应用于您的ProxyPass指令。请记住检查DirectorySlash如果您打算支持目录列表,它会尝试将目录重定向到/然后再循环回来。

答案 1 :(得分:0)

你的apache配置中可能有这样的东西:

ProxyRequests On
ProxyVia On
<Proxy *>
   Order deny,allow
   Allow from xx.xx.xx.xx
</Proxy>

然后您必须添加以下内容才能将所有请求代理传递到www.olddomain.com/foo到www.newdomain.com/bar

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule /foo(.*)$ http://www.newdomain.com/bar/$1 [P,L]

这是做什么的:

当请求托管www.olddomain.com时,RewriteRule将会触发 此规则将/ foo替换为http://www.newdomain.com/bar/ 替换被移交给mod_proxy(P) 停止重写(L) 示例结果:

浏览器配置为使用您的apache作为代理服务器 它要求www.olddomain.com/foo/test.html 您的apache会将其重写为www.newdomain.com/bar/test.html 它将从负责的网络服务器请求此页面 将结果作为www.olddomain.com/foo/test.html

返回浏览器