1

静的 html を使用するサイトがあります。利用可能な PHP または CGI サービスはありません。javascript でややインテリジェントな 404 エラー ページを作成したいと思います。JavaScriptから: 404 ページ、要求された URL を取得する方法は? 受信 404 ページでは利用できないことは理解document.refererしていますが、そこにある回答の 1 つは、htaccess 経由でリクエスト URL を渡すことができる可能性があることを示唆しています。どうすればそれを行うことができますか?以下は機能しません。

.htaccess:

RewriteEngine on
ErrorDocument 404 /err404.html?url=%{HTTP_REFERER}

err404.html:

<html><body>
<script type="text/javascript">
    var file;
    file = window.location.pathname;
    document.write('sorry, ' + file + ' not found');
</script>
<body></html>

結果の URL は着信と同じままです。http://www.example.com/something-not-here

4

2 に答える 2

1

mod_rewrite と .htaccess を有効にしてからhttpd.conf、このコードをディレクトリの.htaccess下に配置します。DOCUMENT_ROOT

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d   # `!-d` means if directory doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f   # if file doesn't  ... 
RewriteCond %{REQUEST_FILENAME} !-l   # if link doesn't

# L = last rule, stop processing
# QSA = Query String Append
# R = Redirect (default is 302, temporary)
RewriteRule ^ /err404.html?url=%{REQUEST_URI}&refr=%{HTTP_REFERER} [L,QSA,R]

次に、err404.html を次のように変更します。

<html><body>
<script type="text/javascript">
   function getQueryVariable(variable) {
       var query = window.location.search.substring(1);
       var vars = query.split('&');
       for (var i = 0; i < vars.length; i++) {
           var pair = vars[i].split('=');
           if (decodeURIComponent(pair[0]) == variable) {
               return decodeURIComponent(pair[1]);
           }
       }
       console.log('Query variable %s not found', variable);
   }
   document.write('sorry! ' + getQueryVariable('url') + 
                  ' not found, requesting URL: ' + getQueryVariable('refr'));
</script>
<body></html>

これにより、ページのように存在しない URIに対して次のテキストが表示されます。http://domain.com/not-herehttp://domain.com/sample.html

sorry! /not-here not found, requesting URL: http://domain.com/sample.html
于 2013-03-12T19:23:17.193 に答える
0

質問を正しく理解した場合、それwindow.locationは常にブラウザに表示されるURLを提供するためです。書き換えられたURLはサーバー側でのみ使用できるため、これを実現するにはサーバー側の言語が必要になります。

于 2013-03-12T14:40:59.917 に答える