【问题标题】:Aliasing a URL in Apache2 with mod_jk使用 mod_jk 在 Apache2 中为 URL 起别名
【发布时间】:2016-03-26 12:15:23
【问题描述】:

我正在使用带有 mod_jk 的 Apache 2.4 和运行 Java servlet 的 Tomcat。我正在服务的应用程序有一个丑陋的索引 URL:访问 www.mydomain.com/ 会将用户带到 www.mydomain.com/view/user/www/。我想给它起别名,以便用户看到 www.mydomain.com/app/,我正在尝试使用 mod_rewrite 来实现这一点。 这是我目前的设置:

LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
JkWorkersFile /etc/apache2/workers.properties
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # Is it one of these options?

VirtualHost *:80>
        ServerName www.mydomain.com
        Redirect permanent / https:/www.mydomain.com
</VirtualHost>

<VirtualHost *:443>
        ServerName www.mydomain.com
        ServerAdmin webmaster@localhost
        JkMount / tomcat
        JkMount /* tomcat

        LoadModule rewrite_module modules/mod_rewrite.so
        RewriteEngine On
        RewriteRule ^/$ /app [PT]
        RewriteRule ^/app/?$ /view/user/www [PT,L]
        RewriteRule ^/app/(.*)$ /view/user/www/$1 [PT,L]

        SSLEngine on
        SSLCertificateFile /path/to/my_domain.crt
        SSLCertificateKeyFile /path/to/my_domain.key
        SSLCertificateChainFile /path/to/chainfile.crt
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
</VirtualHost>

所有这些都在 apache2.conf 中。它目前正在做一些与我想要的不同的事情。当您输入 www.mydomain.com/app 时,栏中的地址将更改为 www.mydomain.com/view/user/www(并且它提供正确的页面)。我希望栏继续显示 www.mydomain.com/app,但显示tomcat 在/view/user/www 上的内容,从而向用户隐藏丑陋的URL。我怎样才能做到这一点?

【问题讨论】:

    标签: apache tomcat mod-rewrite apache2 mod-jk


    【解决方案1】:

    RewriteRule ... [PT] + mod_jk 需要

    JkOptions     +ForwardURICompatUnparsed
    

    【讨论】:

      【解决方案2】:

      试试这个:

      RewriteRule ^/$ /app [R]
      RewriteRule ^/app/?$ /view/user/www [PT]
      RewriteRule ^/app/(.*)$ /view/user/www/$1 [PT]
      

      [R]是重定向,地址栏需要修改url。

      [PT,L] 没有用,因为 [PT] 包含 [L]。

      【讨论】:

      • 不幸的是,它的行为与以前相同。键入 www.mydomain.com/app 会将地址栏更改为 www.mydomain.com/view/user/www。
      • 奇怪...在我的 Apache 2.2.31 中并没有这样操作。我在我的基本目录的 .htaccess 中对其进行了测试(没有起始斜线): RewriteBase / RewriteRule 上的 RewriteEngine ^*$ /app [R] RewriteRule ^app/?$ /view/user/www [PT] RewriteRule ^app/ (.*)$ /view/user/www/$1 [PT]
      • 我认为这与它由 mod_jk 提供服务并且不引用文件系统位置这一事实有关?
      • 好的,我想我明白了。你不使用 RewriteBase,你应该因为 /app 在服务器上不存在。 httpd.apache.org/docs/current/en/mod/… - 或者创建 /app 看看会发生什么。
      • RewriteBase 不适用,因为替换不是相对的
      猜你喜欢
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      相关资源
      最近更新 更多