2015-09-04 81 views
0

我設置了一些阿帕奇(httpd的)配置Apache服務器對開一個Tomcat服務器這樣的:阿帕奇/的httpd的mod_rewrite和文件指令不工作

<Proxy *> 
    Order deny,allow 
    Allow from all 
    AllowOverride All 
    </Proxy> 

    <IfModule mod_rewrite.c> 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.+)\.v(\d+)\.(js|css|png|jpe?g|gif)$ $1.$3 [L] 
    </IfModule> 

    ProxyPass/http://localhost:8080/ retry=0 
    ProxyPassReverse/http://localhost:8080/ 
    ProxyPreserveHost on 

    <Files "*.html"> 
    Header set Cache-Control "public, max-age=900" 
    </Files> 

都在我重寫模塊和頭模塊安裝。 mod_rewrite規則就在那裏,以便我可以靜態化我的靜態資源,例如style.v2.css將被轉換爲style.css等。自定義標題是爲了避免瀏覽器積極緩存html文件。

代理指令將請求傳遞到偵聽端口8080的Tomcat服務器上。雖然重寫規則不起作用。我爲style.v2.css得到了一個404,因爲它沒有將文件名轉換爲style.css。

自定義標頭也沒有得到應用,但僅僅是因爲<Files>指令與我的html文件不匹配。如果我刪除了<Files>指令並將自定義標題應用於所有文件,那麼它們都會在其響應中獲得該標題。

我不知道如何調試。這個配置有什麼明顯的錯誤嗎?


我忘記了包含RewriteEngine On以使重寫規則起作用。現在我已經添加了。即使我正在請求html文件,<Files>匹配仍然不起作用。

此外,使用:

<Files "myfile.html"> 
    Header set Cache-Control "public, max-age=900" 
    </Files> 

...還是,當我提出要求專門爲myfile.html不起作用。順便說一句,這個配置在<VirtualHost _default_:443>之內。

我也試圖把我<Files>指令一個指令<Directory>裏面,但它仍然不能正常工作:

<Directory "/var/www"> 
    <Files "*.html"> 
    Header set Cache-Control "public, max-age=600" 
    </Files> 
</Directory> 

回答

0

文件指令顯然是無用的,因爲我沒有DocumentRoot的設置如

DocumentRoot /var/www 

一旦我這樣做,文件開始匹配。