我正在尝试通过htaccess找到以下方法。
以下是目录结构的示例。
"http://example.com" (canonical - this is what I want)
"http://example.com/index" (redirect or 404)
"http://example.com/index/" (redirect or 404)
"http://example.com/index.php" (redirect or 404)
"http://example.com/index.php/" (redirect or 404)
"http://example.com/about" (canonical - this is what I want)
"http://example.com/about/" (redirect or 404)
"http://example.com/about.php" (redirect or 404)
"http://example.com/about.php/" (redirect or 404)
更新:
这是我目前的配置,使用php委托规范链接和预制重定向/显示404.如果你发现它有问题或者可以提供更好的解决方案,我会非常感激。现在,下面的代码工作,给每个php文件它自己的特定于页面的规范链接功能。然后,该函数识别当前页面是否与规范相同,如果不是,则会抛出错误,使目标页面成为唯一可以访问内容的页面。
ErrorDocument 404 /404.php
RewriteEngine On
#removes trailing slash
RewriteCond %{HTTP_HOST} ^localhost:8888$
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
#removes php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
<?php
function resolve_canonical($canonical,$location = "404"){
$current_url= "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if($current_url !== $canonical){
if($location == "404"){
//header("location: http://".$_SERVER['HTTP_HOST']."/404");
//header("HTTP/1.0 404 Not Found");
readfile('404.php');
exit();
}elseif($location == "redirect"){
header("location: ".$canonical);
exit();
}
}
}
?>
答案 0 :(得分:1)
如果不是您首选的网址,请检查%{REQUEST_URI}
并执行301重定向。此外,对于搜索引擎,请查看规范元标记。