使用 .htaccess 更改端口和主机

使用 .htaccess 更改端口和主机

我正在尝试使用mod_rewrite端口转发将子域上的端口转发到另一个 IP 上的另一个端口。

像这样:

sub.website.com:2000 --> 123.45.67.891:3000 

如何使用.htaccess带有的文件 来实现这一点mod_rewrite

我尝试了以下方法但无济于事:

RewriteCond %{HTTP_HOST} ^sub.website.com$ [NC]
RewriteCond %{SERVER_PORT} ^2000$
RewriteRule ^(.*)$ https://123.45.67.891:3000/$1 [L,R=302]

答案1

尝试在你的中使用它.htaccess

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^sub.website.com:2000 [NC]
RewriteRule (.*) https://123.45.67.891:3000/$1 [R=301,L]

您还可以在这里查看已接受的答案(http://www.webmasterworld.com/apache/3264071.htm)。R=301 用于永久重定向。如果您希望使用临时重定向,请使用 R=302。

如果没有帮助,您可以尝试在 apache 中启用代理:(编辑 /etc/apache2/httpd.conf)

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

ProxyRequests Off

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

<VirtualHost sub.website.com:2000>
    ServerName  redirecting
    ServerAdmin [email protected]

    ProxyRequests off
    ProxyPass / http://123.45.67.891:3000
</VirtualHost>

(查看此处发布的解决方案Apache 端口转发)。

答案2

使用 .htaccess 文件中的 RewriteRules 很难做到这一点。您的问题是,只有在服务器完成 URL 到文件名的转换阶段后,才会读取 .htaccess 文件。只有在服务器得出(初步)结论,即它需要提供的资源存在于其文件系统中后,它才会开始读取相关的 .htaccess 文件。因此,您的 .htaccess 文件可能从未被读取过,无法处理这些请求。启用 rewritelog 可以找出原因。

您应该在主服务器配置中执行此操作。

相关内容