Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache:在后台重写URL_Apache_Mod Rewrite_Url Rewriting - Fatal编程技术网

Apache:在后台重写URL

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

这个问题可能太简单了,但尽管经过了数小时的测试(甚至使服务器崩溃两次),我还是无法让它工作

这个问题经常被问到:Tomcat服务器可以通过以下方式访问: “域.net:8080/theserver/” 我希望它可以直接在“domain.net/”上访问。 这也应该在用户的浏览器中可见

我用来配置站点的引擎“Plesk”为这些东西提供了一个命令字段。通过以下几行,我建立了可视重定向:

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修复了这些重定向,以便您使用前端主机/端口

  • 确保已启用Web服务器的重写模块
  • 确保apache同时侦听端口80和8080
  • 将其添加到根目录中的.htaccess文件,但不添加到子目录“theserver”中

    重新启动发动机

    重写cond%{HTTP_HOST}^(www.)?domain.net$

    重写cond%{REQUEST_URI}^/服务器/

    重写cond%{REQUEST_FILENAME}-f

    重写cond%{REQUEST_FILENAME}-d

    重写规则^(.*)$$1

    重写cond%{HTTP_HOST}^(www.)?domain.net$

    重写规则^(/)?$[L]


  • 您可能需要实际设置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
    vs
    theserver/
    ——它们是否相同?@Kay感谢您的评论!我指的是用户浏览器中的URL栏。url会先更改,然后页面才能正确加载。是的,我在这里的问题中用myserver/theserver犯了一个错误。它的本意是一样的。将在一秒钟内编辑它。但是服务器上的代码是正确的,否则我将无法访问该站点。非常感谢您的回答!是的,你说的很有道理。。然而,我已经试了一个多小时了,并没有再进一步。。。你能告诉我在哪里我必须指定到tomcat服务器的链接/路径吗?喜欢“”部分吗?因为我不能像链接中的示例那样将其设置为DocumentRoot,因为Apache无法启动,因为它会在一些子文件夹中搜索…直到周一我才有很多时间。我使用驻留在“站点可用”目录中的虚拟主机。我在回答中举了一个例子。一小时是很短的时间。:-)