0

我在 Apache 上有一个带有 tomcat 的应用程序显示,我想显示一些来自 apache 而不是 tomcat 的信息以提高效率。所以我在玩这个httpd.conf文件,这是我的 conf 文件的一部分:

<VirtualHost info.com:80>
LimitRequestFieldSize 32768
ServerName info.com
ServerRoot "E:/Inetpub/Int/catalina_int/Apache2.2"
DocumentRoot "E:/Inetpub/Int/catalina_int/Apache2.2/htdocs"
SetEnvIf Request_URI "/app/*.cache.html" no-jk 

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
<Directory "E:/Inetpub/Int/catalina_int/kerberos-tomcat-6.0.26/webapps/appWeb">
    Options Indexes FollowSymLinks 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
</Directory>
<Directory "E:/Inetpub/Int/catalina_int/kerberos-tomcat-6.0.26/webapps/appWeb/app">
    Options Indexes FollowSymLinks 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
</Directory>
RewriteLog "E:/Inetpub/Int/catalina_int/Apache2.2/logs/apache.rewrite.log" 
JkMount /* appweb

JkUnMount /appWeb/app/*.cache.html appweb
JkUnMount /appWeb/app/resources/flash/* appweb
JkUnMount /appWeb/app/resources/flash_en/* appweb   

在 Apache 的日志中,当 Apache 尝试加载文件 *.cache.html 时出现错误 404。文件存在且路径正确。我做错了什么?

编辑:感谢您对 Am​​blyopus 的回复。你说得对,这不是我想做的。实际上,我可以通过将 DocumentRoot 直接指向 tomcat 的 webapps,删除 ,并仅使用 JkMount 来解决我的问题。

<VirtualHost info.com:80>
LimitRequestFieldSize 32768
ServerName info.com
ServerRoot "E:/Inetpub/Int/catalina_int/Apache2.2"
DocumentRoot "E:/Inetpub/Int/catalina_int/kerberos-tomcat-6.0.26/webapps"
RewriteLog "E:/Inetpub/Int/catalina_int/Apache2.2/logs/apache.rewrite.log" 

JkMount /appWeb/app/*.jsp appweb 
     JkMount /appWeb/app/*Service appweb #servlet

</VirtualHost>
4

1 回答 1

1

SetEnvIf 需要一个正则表达式。你现在有 /app/*.cache.html 这基本上意味着它搜索 /app,然后是任意数量的 /,然后是任何字符,然后是缓存,然后是任何字符,然后是 html。不是你想要的吗?

你想要像 ^/app/.*.cache.html 这样的东西,这意味着 uri 必须以 /app/ 开头,然后有任意数量的字符,后跟 .cache.html

最好对正则表达式进行一些研究,因为许多指令希望您使用它们。

于 2013-02-08T17:53:56.770 回答