Очистка URL-адресов и дубликатов страниц (форсирование канонического с самого начала). - PullRequest
1 голос
/ 28 июля 2011

Я пытаюсь найти способы сделать следующее через htaccess.

  1. Удалить (.php) расширение
  2. Удалить завершающие косые черты (/)
  3. Перенаправить прежнийСтраница (.php) на страницу без php
  4. Перенаправить все следы корневого индекса в корневой домен

Вот пример структуры каталогов.

"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 для делегирования канонической ссылки и перенаправления preform / show 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 Ответ

1 голос
/ 28 июля 2011

Изучите %{REQUEST_URI} и выполните перенаправление 301, если это не ваш предпочтительный URL.Также для поисковых систем посмотрите канонический метатег.

...