mod_rewrite到不同的服务器和追加参数

时间:2009-08-14 13:04:14

标签: mod-rewrite

我已经浏览了很多mod_rewrite示例,但是我无法找到如何重写URL以便将对一个域的查询重定向到新域,并添加了特定的URL参数。我需要实现以下目标:

a)更改服务器名称
b)更改路径以包含应用程序名称
c)附加URL参数

例如:

example.com/index.html  -->  new_example.com/app/index.html?user=XX
example.com/page1.html  -->  new_example.com/app/page1.html?user=XX
example.com/page2.html  -->  new_example.com/app/page2.html?user=XX
example.com/page3.html  -->  new_example.com/app/page3.html?user=XX

先谢谢,凯文。

3 个答案:

答案 0 :(得分:4)

事实证明,你可以使用[P]重定向标志使用mod_rewrite重写到不同的域。据我了解,这相当于mod_proxy。

我需要的是:

example.com/index.html  -->  new_example.com/app/index.html?user=XX
example.com/page1.html  -->  new_example.com/app/page1.html?user=XX

以及实现此目的的重写规则是:

RewriteRule .* http://new_example/app$0?user=XX [P]  

感谢您的投入。

答案 1 :(得分:0)

您绝对可以使用mod_rewrite重定向到其他域;你只是不能用它来重写到另一个域(即保持浏览器中的URL仍然提供来自另一个站点的内容)。

请查看this article on askapache.com以获取各种形式的重定向的一些示例。

在这种情况下,您可能需要以下内容:

RewriteRule .* http://www.new_example.com/app/$0?user=XX [R=301,L]

答案 2 :(得分:0)

我可能没有与您完全相同的设置,但这目前适用于我:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName main:80
    DocumentRoot ...
</VirtualHost>

<VirtualHost *:80>
    ServerName alt:80
    RewriteEngine On
    RewriteCond %{HTTP_HOST}  ^alt
    RewriteRule ^/(.*) http://alt:8080/$1 [P]
</VirtualHost>

然后我有一个单独的Apache服务器实例,它有自己的conf文件,指示它在8080上监听。[P]用于代理,我想我是在其中一个高级示例中得到的。

如果这不起作用......

  1. 您使用的是哪个版本的Apache?
  2. 新域是在同一台计算机上,还是由同一个Apache实例托管,还是单独托管?