![使用 Tomcat 7 和 Apache 反向代理进行根重定向](https://linux22.com/image/565252/%E4%BD%BF%E7%94%A8%20Tomcat%207%20%E5%92%8C%20Apache%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E8%BF%9B%E8%A1%8C%E6%A0%B9%E9%87%8D%E5%AE%9A%E5%90%91.png)
预期行为:请求示例.com应该重定向到example.com/。
问题:在浏览器(Firefox)中请求示例.com成功。浏览器中的请求example.com/重定向至示例.com,这是倒退的。使用 curl,两个请求都不会重定向,并且都提供相同的内容。
$ curl -D - example.com
HTTP/1.1 200 OK
Date: Sun, 23 Oct 2011 05:54:28 GMT
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 27
Connection: close
Servlet handling request: /index.html
$ curl -D - example.com/
HTTP/1.1 200 OK
Date: Sun, 23 Oct 2011 06:01:24 GMT
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 27
Connection: close
Servlet handling request: /index.html
对 Tomcat 的直接请求按预期运行。
$ curl -D - localhost:8080/myapp
HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
Location: http://localhost:8080/myapp/
Transfer-Encoding: chunked
Date: Sun, 23 Oct 2011 05:50:20 GMT
<html><body><p>Redirecting to <a href="http://localhost:8080/myapp/">http://localhost:8080/myapp/</a></p></body></html>
我认为问题出在我的反向代理配置上。 (我从 webapp 中的 /a 目录为 Apache 提供静态内容。)
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /usr/share/tomcat7/webapps/myapp
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/a/
RewriteRule (.*) ajp://localhost:8009/myapp$1 [P]
<Directory /usr/share/tomcat7/webapps/myapp/a>
Order deny,allow
Allow from all
</Directory>
<Directory /usr/share/tomcat7/webapps/myapp>
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
答案1
http://example.com/
完全相同- 两者都是对路径http://example.com
的请求。路径不能为空:“www.example.com
/
如果 URL 中不存在 abs_path,则在用作资源的请求 URI 时必须将其指定为“/”“。因此,/ 没有重定向,这可能只是不同 UI 的不同行为。
/myapp
但是,它与:不同,/myapp/
并且/myapp
是两个不同的 URL,在这里您可以执行重定向、提供不同的页面等等。