.htaccess-为Memento配置Apache服务器
我尝试配置一个.htaccess-为Memento配置Apache服务器,apache,.htaccess,mod-rewrite,memento,Apache,.htaccess,Mod Rewrite,Memento,我尝试配置一个Apache服务器来添加一个指向Mementotimegatesurl的HTTP链接头 我的访问权限: RewriteEngine on RewriteCond %{IS_SUBREQ} false RewriteRule ^/(.*) - [E=ORIGURI:%{HTTP_HOST}/$1] RewriteRule ^/(.*) - [E=ORIGQRY:] RewriteCond %{QUERY_STRING} .+ RewriteRule ^/(.*) - [E=ORI
Apache
服务器来添加一个指向Memento
timegatesurl的HTTP链接头
我的访问权限:
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"
.
.
.
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"
重新编写引擎打开
RewriteCond%{IS_SUBREQ}FALSE
重写规则^(.*)-[E=ORIGURI:$1]
重写规则^(.*)-[E=ORIGQRY:]
重写cond%{QUERY_STRING}+
重写规则^(.*)-[E=ORIGQRY:?%{QUERY\u STRING}]
重写规则^(.*)-[E=ORIGPROTO:http]
在上重写cond%{HTTPS}
重写规则^(.*)-[E=ORIGPROTO:https]
标题始终设置链接“rel=timegate”
服务器发送的新响应:
Link <http://purl.org/memento/timegate/http://(null)>;rel=timegate
链接;rel=时间门
正如我们可以看到的那样,解析的是协议,而不是url的其余部分,还有其他建议吗?您的规则具有此模式^/(.*)
,如果规则位于htaccess文件中,则该模式将永远不匹配。在htaccess文件中应用规则时,Mod_rewrite会从URI中去掉前导斜杠。删除模式中的前导斜杠:
RewriteRule ^(.*) - [E=ORIGURI:%{HTTP_HOST}/$1]
等等。为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"
重新编写引擎打开
重写规则^(.*)-[E=ORIGPROTO:http]
在上重写cond%{HTTPS}
重写规则^(.*)-[E=ORIGPROTO:https]
重写规则^(.*)-[E=ORIGURI:%{HTTP_HOST}]
RewriteCond%{THE_REQUEST}\s/+([^\s?]+)
重写规则^-[E=ORIGQRY:%1]
标题始终设置链接“rel=timegate”
见:
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"');
函数get_canonical_url($proto='http://'){
$canonical_url=$proto;
如果($\服务器[“服务器\端口”!=“80”){
$canonical_url.=$服务器[“服务器名称”]。:“$服务器[“服务器端口”]。$服务器[“请求URI”];
}
否则{
$canonical_url.=$_服务器[“服务器名称”]。$_服务器[“请求URI”];
}
返回$canonical_url;
}
标题('Link:;rel=“canonical”');
参考资料:谢谢,新链接现在是<应该是<你能提供更多建议吗?
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"');