SEO дружественные URL, проблемы с переписыванием и перенаправлением. Более элегантный способ?

0

Я пытаюсь написать небольшой оптимизированный SEO сайт, я давно не писал php, и это мой первый пост здесь. Спасибо, спасибо, спасибо! Самый эффективный способ кодирования дружественных URL-адресов для SEO?

Я хочу, чтобы URL-адреса были очень читабельными и удобными для пользователя, но носят общий характер, поэтому я могу использовать его на разных сайтах с совершенно разными категориями.

Что делает скрипт в данный момент: если вы введете браузерную панель www.domain.com/dev/topic1/topic2/topic3, путь будет переписан через RewriteRule в index.php, а затем скрипт получит тему3 из базы данных и показывает HTML этой конкретной темы. Мне нужно, чтобы URL-адреса были в нижнем регистре, и я хочу, чтобы весь URL-адрес заканчивался окончательным "/". Итак, я написал две переадресации, первые нижние регистры все и перенаправляют, если URL-адрес закончился без косой черты, URL-адрес с косой чертой. так например: www.domain.com/dev/topic1/topic2/TOPIC3 перенаправляется на: www.domain.com/dev/topic1/topic2/topic3, а затем перенаправляется на: www.domain.com/dev/topic1/topic2/topic3 /

Поэтому каждая тема имеет только один действительный уникальный URL. Надеюсь, нет дублирующего контента. Есть ли более элегантный способ сделать это, и вы видите серьезные ошибки в этой идее /conzept?

Приветствие из Германии! :)

$site = "http://www.domain.com/dev/"; 
$path = filter_var(htmlspecialchars($_GET["q"]), FILTER_SANITIZE_URL);
$v = filter_var(htmlspecialchars($_GET["v"]), FILTER_SANITIZE_URL);

$objects = explode("/",$path);
// 301 Redirect if Uppercase
if (preg_match('/[[:upper:]]/', $path) ) {
  $path = strtolower($path);
  header('HTTP/1.1 301 Moved Permanently'); 
  header('Location: '. $site . $path . ($v ? "?v=$v" : ""));
  exit;
}

// 301 Redirect if Filename
if (end($objects)) {
  header('HTTP/1.1 301 Moved Permanently'); 
  header('Location: '. $site . $path . "/" . ($v ? "?v=$v" : ""));
  exit;
}

Вот мой файл htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /dev/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
  • 0
    Вопрос неясен, в чем ваша проблема?
  • 0
    если есть лучший способ сделать это, perhabs в переписать или что-нибудь? Спасибо!
Показать ещё 1 комментарий
Теги:
.htaccess
redirect
mod-rewrite

1 ответ

1
Лучший ответ

Я бы заменил PHP-код следующим:

$site = 'http://www.domain.com/dev/'; 
$path = filter_var(htmlspecialchars($_GET['q']), FILTER_SANITIZE_URL);
$v = filter_var(htmlspecialchars($_GET['v']), FILTER_SANITIZE_URL);
$needsRedirect = false;

// Convert the path to lower case
if (preg_match('/[[:upper:]]/', $path)) {
    $path = strtolower($path);
    $needsRedirect = true;
}

// Add slash to the end of the path
if (substr($path, -1) !== '/') {
    $path .= '/';
    $needsRedirect = true;
}

if ($needsRedirect) {
    header('HTTP/1.1 301 Moved Permanently'); 
    header('Location: '. $site . $path . ($v ? "?v=$v" : ''));
    exit;
}

Теперь вам понадобится только одно перенаправление, если URL-адрес является верхним регистром и не заканчивается косой чертой '/'.

  • 0
    Вау! не думал об этом! Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню