我想要做的是设置一个重写规则,这样当输入 URL 时它将显示为example.com/test
。
例如,如果可能的话,我会尝试这样做。
我已将 CNAME 设置为site.example.com
指向site.devexample.com
(供应商端的开发远程环境)
如果用户访问,site.example.com
该 URL 将被重写为类似的内容example.com/test
。
我目前拥有的东西似乎没有起作用,当我访问时site.example.com
它保持原样。
# rewrite rules for site.example.com
RewriteCond %{http_host} ^site\.example\.com [NC,OR]
RewriteCond %{http_host} ^www\.site\.example\.com [NC]
RewriteRule $ http://example.com/test/ [R,L]
我是否需要做一个反向代理,然后从那里重写?
编辑:抱歉,我应该解释得更清楚一点。site.example.com 归 test.com(公司 A)所有。因此,我们将 CNAME 更改为指向 site.devEnvironment.com(公司 B.com)
test.com/test 是我们的服务器和目录,尝试将 URL 重写为 test.com/test 而不是 site.example.com
我们的重定向是在 httpd.conf 文件中设置的,不确定这是否也有帮助
答案1
我猜 rewritecond 或 rewritemap 正则表达式不匹配。我发现这些很难猜。
确保你有非常详细的 mod_rewrite 日志记录(apache 2.4 设置日志级别,Apache 2.2 设置重写日志)如果您不是 Web 服务器的管理员,这可能对您没有帮助。
尝试这样的重写规则:
RewriteRule ^foobar /clams/%{HTTP_HOST}/fish [R,L]
由于foobar
是无意义的位置,因此它不会干扰实际流量。将浏览器指向foobar
,它将重定向到另一个无意义的位置并给您一个错误,但 URL 栏也会告诉您 var%{HTTP_HOST}
包含的确切内容。(蛤蜊和鱼将充当引号,因此如果%{HTTP_HOST}
包含斜线或空格等棘手的字符,您将会看到它。)
(为了兼容 .htaccess,从 foobar 中删除了 /,感谢 @w3dk)
答案2
我最终做的是设置一个 proxypass /test site.example.com
这样当服务器看到 /test 时,它将加载来自 site.example.com 的内容