清理网址和重复页面(从一开始就强制规范)。

时间:2011-07-28 00:09:04

标签: php .htaccess mod-rewrite clean-urls

我正在尝试通过htaccess找到以下方法。

  1. 删除(.php)扩展程序
  2. 删除尾部斜杠(/)
  3. 将前(.php)页面重定向到非php页面
  4. 将根索引的所有跟踪重定向到根域
  5. 以下是目录结构的示例。

    "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();  
         }
      }
    }
    
    ?>
    

1 个答案:

答案 0 :(得分:1)

如果不是您首选的网址,请检查%{REQUEST_URI}并执行301重定向。此外,对于搜索引擎,请查看规范元标记。