我正在尝试从所有网址中删除尾部斜杠并重定向。
我在这里完成了这个:
<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显示没有斜杠。
提前致谢!
答案 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
返回浏览器