17663


メンテナンス画面（RewriteEngine）へCSSファイルを適用させたいのですが、上手くいきません。  
(メンテナンス時のhtmlは表示されています。）  
また、直接メンテナンス用htmlファイルをダブルクリックし、立ち上げるとcssは適用されています。

適用させたいcssファイル名は `import.css` です。

階層

[code]

    htdocs-maintenance.html
          -css-import.css
    
[/code]

maintenance.html内、cssリンク部分

[code]

    <link rel="stylesheet" type="text/css" media="screen, projection, tv" href="css/import.css">
    
[/code]

[httpd.conf]

[code]

    ErrorDocument 503 /maintenance.html
    
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{REQUEST_URI} !=/maintenance.html
        RewriteCond %{REQUEST_URI} !=/css/import.css
        RewriteRule .* /maintenance.html [R=503,L]
    </IfModule>
    Include conf/extra/httpd-proxy.conf
    
[/code]

[httpd-proxy.conf]

[code]

    <Location /test/>
        ProxyPass ajp://localhost:8009/test/
    </Location>
    
[/code]

画面を表示すると、

> Failed to load resource: the server responded with a status of 503 (Service
> Unavailable) `http://localhost:81/test/css/import.css`

というエラーが出力されており、cssが適用されていません。  
（直接maintenance.htmlを起動した場合はcssが適用されています）

おそらく、メンテナンスモードでmaintenance.htmlを起動すると、ルートディレクトリがtestになってしまう部分が原因だと思うのですが解決方法が分かりません。

  * メンテナンスモードのURL：  
`http://localhost:81/test/ServletName`

  * 直接maintenance.htmlを起動した場合のURL：  
`file:///C:/Program%20Files/Apache24/htdocs/maintenance.html`

絶対パスでCドライブからcssファイルを指定すると「Not allowed to load local
resource」で、参照することが出来ませんでした。  
解決方法の分かる方がいましたら、ご教授をお願いします。


CC BY-SA 3.0
2015-10-14T01:48:31.987
17622
2015-10-15T03:30:09.107
2015-10-15T02:54:14.040
8000
7626
question
html css apache
apache： メンテナンス画面（RewriteEngine）へCSSファイルを適用させたい


cssリンクの部分で、以下のようにcssの前にスラッシュを追加します。  
ルート(htdocsフォルダ)からの絶対パスです。

[code]

    href="/css/import.css"
    
[/code]


CC BY-SA 3.0
2015-10-15T02:10:20.313
17663
2015-10-15T02:24:00.117
2015-10-15T02:24:00.117
7626
7626
17622
answer


`ErrorDocument` にせよ `RewriteRule` にせよ、 **ブラウザからみたURLは書き換えていない**
というのがポイントです。そのため、どのURLで表示されても同じ挙動をするようにHTMLを書く必要があります。

[code]

    <link rel="stylesheet" type="text/css" media="screen, projection, tv" href="css/import.css">
    
[/code]

相対URLはブラウザからみたURLを基準に解釈されるため、 `http://localhost:81/test/ServletName`
にアクセスしてこのページが表示されると、 `/test/css/import.css` を読みに行ってしまいます。

これを避けるには `/css/import.css` といった絶対パスで指定するとよいでしょう。先頭に `/`
を付けることで、現在のディレクトリではなく、ルートディレクトリが基準になります。

もしくは、メンテナンス画面等ではCSSをインラインで埋め込んでしまうのも手です。この場合CSSファイルを mod_rewrite
で除外する必要がないですし、一ファイルで完結するのでメンテナンス作業がしやすいかもしれません

なおWebサーバーにアクセスする場合においてはルートディレクトリ＝ドキュメントルートですが、ローカルのファイルを開くときのルートディレクトリは
Windows 上だとドライブルート、Linux等では `/`
になります。このため、直接ファイルを開いた場合には正しく表示されなくなると思いますが、両立は難しいです。


CC BY-SA 3.0
2015-10-15T03:30:09.107
17668
2015-10-15T03:30:09.107
8000
17622
answer