将Apache2中的URL别名为mod_jk

将Apache2中的URL别名为mod_jk,apache,tomcat,mod-rewrite,apache2,mod-jk,Apache,Tomcat,Mod Rewrite,Apache2,Mod Jk,我正在使用Apache2.4,mod_jk和Tomcat运行Java servlet。我服务的应用程序有一个难看的索引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

我正在使用Apache2.4,mod_jk和Tomcat运行Java servlet。我服务的应用程序有一个难看的索引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>
LoadModule jk_module/usr/lib/apache2/modules/mod_jk.so
JkWorkersFile/etc/apache2/workers.properties
JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectories#它是这些选项之一吗?
虚拟主机*:80>
服务器名www.mydomain.com
重定向永久/https:/www.mydomain.com
服务器名www.mydomain.com
服务器管理员webmaster@localhost
JkMount/tomcat
JkMount/*tomcat
LoadModule rewrite_module modules/mod_rewrite.so
重新启动发动机
重写规则^/$/app[PT]
重写规则^/app/?$/view/user/www[PT,L]
重写规则^/app/(.*)$/view/user/www/$1[PT,L]
斯伦金安
SSLCertificateFile/path/to/my_domain.crt
SSLCertificateKeyFile/path/to/my_domain.key
SSLCertificateChainFile/path/to/chainfile.crt
SetEnvIf用户代理“*MSIE.*”无保留ssl未清理关闭
所有这些都在apache2.conf中。它目前正在做一些与我想要的不同的事情。当您键入www.mydomain.com/app时,栏中的地址将更改为www.mydomain.com/view/user/www(并提供正确的页面)。我希望该栏继续显示www.mydomain.com/app,但显示tomcat在/view/user/www上的内容,从而对用户隐藏丑陋的URL。我如何才能做到这一点?

试试这个:

RewriteRule ^/$ /app [R]
RewriteRule ^/app/?$ /view/user/www [PT]
RewriteRule ^/app/(.*)$ /view/user/www/$1 [PT]
[R] 如果是重定向,则应在地址栏中修改url


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

重写规则。。。[PT]
+mod_jk需要

JkOptions     +ForwardURICompatUnparsed

不幸的是,它的行为与以前一样。键入www.mydomain.com/app会将地址栏更改为www.mydomain.com/view/user/www.奇怪。。。在我的Apache2.2.31中,它不是这样运行的。我在我的基本目录下的.htaccess中测试了它(没有起始斜杠):RewriteBase上的RewriteEngine/RewriteRule^*$/app[R]RewriteRule^app/?$/view/user/www[PT]RewriteRule^app/(*)$/view/user/www/$1[PT]我认为这与它由mod_jk提供服务这一事实有关,而不是指文件系统位置?好的,我想我知道了。您不使用RewriteBase,您应该这样做,因为服务器上不存在/app。-或者创建/app,看看会发生什么。RewriteBase为n/a,因为替换不是相对的