我正在尝试使用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 可以找出原因。
您应该在主服务器配置中执行此操作。