我尝试将Apache服务器配置为添加指向Memento TimeGates url的HTTP Link header。
我的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
移除林琼恩建议的前斜杠:
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的其余部分,还有其他的建议吗?
发布于 2013-12-31 15:25:43
为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 - how to capture the current rewrited url?
2.使用的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-31 00:56:20
您的规则具有这样的模式^/(.*),如果规则位于htaccess文件中,它将永远不会匹配。当在htaccess文件中应用规则时,Mod_rewrite从URI中删除前面的斜杠。删除模式中的前导斜杠:
RewriteRule ^(.*) - [E=ORIGURI:%{HTTP_HOST}/$1]等等。
https://stackoverflow.com/questions/20849975
复制相似问题