Apache:在后台重写URL
这个问题可能太简单了,但尽管经过了数小时的测试(甚至使服务器崩溃两次),我还是无法让它工作 这个问题经常被问到:Tomcat服务器可以通过以下方式访问: “域.net:8080/theserver/” 我希望它可以直接在“domain.net/”上访问。 这也应该在用户的浏览器中可见 我用来配置站点的引擎“Plesk”为这些东西提供了一个命令字段。通过以下几行,我建立了可视重定向:Apache:在后台重写URL,apache,mod-rewrite,url-rewriting,Apache,Mod Rewrite,Url Rewriting,这个问题可能太简单了,但尽管经过了数小时的测试(甚至使服务器崩溃两次),我还是无法让它工作 这个问题经常被问到:Tomcat服务器可以通过以下方式访问: “域.net:8080/theserver/” 我希望它可以直接在“domain.net/”上访问。 这也应该在用户的浏览器中可见 我用来配置站点的引擎“Plesk”为这些东西提供了一个命令字段。通过以下几行,我建立了可视重定向: ProxyRequests off RequestHeader unset Accept-Encodi
ProxyRequests off
RequestHeader unset Accept-Encoding
RewriteEngine on
RewriteRule ^(/.*) http://www.domain.net:8080/theserver [P]
不过,重定向不会在后台发生。当我在浏览器中键入domain.net时,它会切换到“domain.net:8080/theserver/”
什么是在后台实现这一点的正确方法?
“theserver”是现在应该可以在服务器上访问的根位置
万分感谢 如果控制apache web服务器,则不必重定向任何URL。 重写应该针对唯一请求进行。如果可能,那么应该在apache的配置中完成您想要的重写类型 首先,您必须告诉apache服务器在端口8080上侦听:
listen 8080
然后,您可以创建如下虚拟主机:
<VirtualHost *.:8080>
Servername www.domain.net
</VirtualHost>
服务器名www.domain.net
例如,见:
和
具体地说
这比使用.htaccess要高效得多,因为后者在每次请求时都会被解析,其中带有虚拟主机的解决方案在服务器启动期间加载到内存中
你的解决方案正好相反。它将使端口可见,因为这是您创建的重写。您希望以另一种方式实现,而这可以通过使用虚拟主机来实现
虚拟主机的一个小示例:
<VirtualHost www.example.nl:8080>
ServerName www.example.nl
ServerAlias example.nl
DocumentRoot /var/www/theserver
<Directory /var/www/theserver>
etc..
</Directory>
etc...
</VirtualHost>
服务器名www.example.nl
ServerAlias example.nl
DocumentRoot/var/www/theserver
等
等
您首先需要确保在plesk中启用了mod\u proxy
和mod\u proxy\u http
此外,您可能应该使用www或不使用www
ProxyRequests Off
RewriteEngine on
RewriteRule ^(.*)$ http://domain.net:8080/myserver/$1 [P]
您还可以在服务器配置/vhost中使用ProxyPass
<Location />
ProxyPass http://domain.net:8080/
ProxyPassReverse http://domain.net:8080/
</Location>
ProxyPasshttp://domain.net:8080/
ProxyPassReversehttp://domain.net:8080/
您只是缺少ProxyPassReverse。后端在初始URL上发送重定向以添加尾部斜杠。ProxyPassReverse修复了这些重定向,以便您使用前端主机/端口
您可能需要实际设置ProxyPass和ProxyPassReverse,以完成您尝试执行的操作
ProxyRequests on
ProxyPass / http://IP_OR_LOCALHOST:8080/theserver/
ProxyPassReverse / http://IP_OR_LOCALHOST:8080/theserver/
OR
ProxyPass /theserver/ http://IP_OR_LOCALHOST:8080/theserver/
ProxyPassReverse /theserver/ http://IP_OR_LOCALHOST:8080/theserver/
OR
ProxyPass /anyname/ http://IP_OR_LOCALHOST:8080/theserver/
ProxyPassReverse /anyname/ http://IP_OR_LOCALHOST:8080/theserver/
你能澄清一下你所说的“可见”重定向和“在后台”是什么意思吗?当你说浏览器“切换到”[带端口的域名],到底发生了什么?切换的“it”是什么?页面是否加载?是否只有显示的地址更改?这两种情况都会发生吗?另外:在您的代码示例中,您提供的路径名与您在文章其余部分中提供的路径名不同——
myserver
vstheserver/
——它们是否相同?@Kay感谢您的评论!我指的是用户浏览器中的URL栏。url会先更改,然后页面才能正确加载。是的,我在这里的问题中用myserver/theserver犯了一个错误。它的本意是一样的。将在一秒钟内编辑它。但是服务器上的代码是正确的,否则我将无法访问该站点。非常感谢您的回答!是的,你说的很有道理。。然而,我已经试了一个多小时了,并没有再进一步。。。你能告诉我在哪里我必须指定到tomcat服务器的链接/路径吗?喜欢“”部分吗?因为我不能像链接中的示例那样将其设置为DocumentRoot,因为Apache无法启动,因为它会在一些子文件夹中搜索…直到周一我才有很多时间。我使用驻留在“站点可用”目录中的虚拟主机。我在回答中举了一个例子。一小时是很短的时间。:-)