2011-06-07 147 views
1

我是nginx新手,我已经安装了php(使用端口8888)和nginx(使用端口80),并且我有一个静态html页面,如www.aa.com:8888/news /html/about/aboutus/index.html,现在我想使用www.aa.com/test/aboutus.html来访问它,并且在执行此操作时,浏览器中的URL不应更改。这个怎么做?nginx重写url问题需要帮助

我尝试了一些办法,但在浏览器中的链接将只是重定向到新的URL字符串...在如下Nginx的conf文件

我的示例配置:

location ^~ /test/aboutus.html { 
     proxy_pass http://127.0.0.1:8888; 
     proxy_redirect default; 
     rewrite ^/test/aboutus.html$ /news/html/about/aboutus last; 
     break; 
    } 

谢谢很多!

回答

1

没有人回答,所以我想我会给它一个镜头。

根据the documentation for proxy_pass

一种特殊的情况是在proxy_pass语句中使用的变量:不使用请求的URL,你是全权负责自己构建的目标URL。

所以,如果你能在那里得到一个变量,你可以提供完整的URL,而不是担心rewrite。事情是这样的:

location /test/aboutus.html { 
    proxy_pass $scheme://127.0.0.1:8888/news/html/about/aboutus; 
} 

我没有测试过这一点(对不起)。

[更新]

还有一个想法:

location /test/aboutus.html { 
    proxy_pass $scheme://127.0.0.1:8888/news/html/about/aboutus; 
    proxy_redirect $scheme://127.0.0.1:8888/news/html/about/aboutus $scheme://$host/test/aboutus.html 
} 

的想法是Location头的答复映射回你希望客户端在浏览器中显示的内容。这就是proxy_redirect的用途(虽然“默认”设置应该工作,我认为)。

+0

感谢您的回复!我测试了一下,在我的本地环境中,浏览器中的URL将从http://localhost/test/aboutus.html更改为http://127.0.0.1:8888/news/html/about/aboutus,不确定是否这是我的nginx环境问题... 我只是想要的URL不会改变... – xeoshow 2011-06-09 02:49:25

+0

真的吗?即使没有'rewrite'规则?这很奇怪...... – Nemo 2011-06-09 03:20:05

+0

是的,完全复制你上面写的东西。我正在测试Windows XP。 – xeoshow 2011-06-09 04:08:49