Я пытаюсь написать небольшой оптимизированный 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>
Я бы заменил 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-адрес является верхним регистром и не заканчивается косой чертой '/'.