0

TimeGates URLへのポインティングApacheを追加するようにサーバーを構成しようとしていますHTTP Link headerMemento

私のhtaccess:

RewriteEngine on

RewriteCond %{IS_SUBREQ} false
RewriteRule ^/(.*) - [E=ORIGURI:%{HTTP_HOST}/$1]

RewriteRule ^/(.*) - [E=ORIGQRY:]
RewriteCond %{QUERY_STRING} .+
RewriteRule ^/(.*) - [E=ORIGQRY:?%{QUERY_STRING}]

RewriteRule ^/(.*) - [E=ORIGPROTO:http]
RewriteCond %{HTTPS} on
RewriteRule ^/(.*) - [E=ORIGPROTO:https]

Header always set Link 
    "<http://purl.org/memento/timegate/%{ORIGPROTO}e://%{ORIGURI}e%{ORIGQRY}e>;rel=timegate"

.
.
.

変更なし: http://www.mementoweb.org/tools/apache/

サーバーでコードをテストしていXAMPPますが、サーバーから送信された応答は次のとおりです。

.
.
.
Link    <http://purl.org/memento/timegate/(null)://(null)(null)>;rel=timegate
Server  Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
.
.
.

htaccessの何が問題になっていますか?

編集1

Jon Lin の提案に従って、先頭のスラッシュを削除します。

RewriteEngine On
RewriteCond %{IS_SUBREQ} FALSE
RewriteRule ^(.*) - [E=ORIGURI:$1]
RewriteRule ^(.*) - [E=ORIGQRY:]
RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*) - [E=ORIGQRY:?%{QUERY_STRING}]
RewriteRule ^(.*) - [E=ORIGPROTO:http]
RewriteCond %{HTTPS} on
RewriteRule ^(.*) - [E=ORIGPROTO:https]
Header always set Link "<http://purl.org/memento/timegate/%{ORIGPROTO}e://%{ORIGURI}e%{ORIGQRY}e>;rel=timegate"

サーバーから送信された新しい応答:

Link <http://purl.org/memento/timegate/http://(null)>;rel=timegate

プロトコルは解析されていますが、URL の残りの部分は解析されていません。他に何か提案はありますか?

4

2 に答える 2

1

^/(.*)ルールには、ルールが htaccess ファイルにある場合は一致しないこのパターンがあります。mod_rewrite は、htaccess ファイルでルールを適用するときに、URI から先頭のスラッシュを取り除きます。パターンの先頭のスラッシュを削除します。

RewriteRule ^(.*) - [E=ORIGURI:%{HTTP_HOST}/$1]

等...

于 2013-12-31T00:56:20.117 に答える
0

Memento 用の Apache サーバーの構成

1. .htaccess を使用した HTTP ヘッダー

RewriteEngine On

RewriteRule ^(.*) - [E=ORIGPROTO:http]
RewriteCond %{HTTPS} on
RewriteRule ^(.*) - [E=ORIGPROTO:https]
RewriteRule ^(.*) - [E=ORIGURI:%{HTTP_HOST}]
RewriteCond %{THE_REQUEST} \s/+([^\s?]+)
RewriteRule ^ - [E=ORIGQRY:%1]

Header always set Link "<http://purl.org/memento/timegate/%{ORIGPROTO}e://%{ORIGURI}e%{ORIGQRY}e>;rel=timegate"

参照: htaccess - 現在の書き換えられた URL を取得する方法は?

2. PHP を使用した HTTP ヘッダー

   function get_canonical_url($proto='http://'){
        $canonical_url = $proto;
        if($_SERVER["SERVER_PORT"] != "80") {
                $canonical_url .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] .  $_SERVER["REQUEST_URI"];
        } 
        else {
                $canonical_url.=$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
        }
        return $canonical_url;
    }

    header('Link: <'.get_canonical_url().'>; rel="canonical"');

リソース: http://moz.com/blog/how-to-advanced-relcanonical-http-headers

于 2013-12-31T15:25:43.673 に答える