我试图使用mod_rewrite基本上端口转发到另一个IP上的另一个端口的子域上的端口。
喜欢这个:
sub.website.com:2000 --> 123.45.67.891:3000
这怎么可以使用mod_rewrite使用.htaccess文件?
我尝试了以下,但无济于事:
RewriteCond %{HTTP_HOST} ^sub.website.com$ [NC] RewriteCond %{SERVER_PORT} ^2000$ RewriteRule ^(.*)$ https://123.45.67.891:3000/$1 [L,R=302]
尝试在你的.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用于永久redirect。 如果您希望使用临时redirect,请改为使用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端口转发解决scheme)。
使用.htaccess文件中的RewriteRules很难做到这一点。 您的问题是.htaccess文件只有在服务器经历了URL到文件名转换阶段之后才被读取。 只有在服务器达到(初步)结论,即需要服务的资源存在于它的文件系统之后,才会开始读取相关的.htaccess文件。 所以这可能是你的.htaccess文件没有被读取这些请求。 启用rewritelog来找出这个。
您应该在主服务器configuration中执行此操作。