SEO 友好的 URL,重写和重定向问题。更优雅的方式?

SEO friendly URLs, problems with rewrite and redirect. More elegant way?

我正在尝试写一个小型的 SEO 优化网站,我已经很久没有写 php,这是我的第一个 post。我已经从你们那里得到了很多帮助,谢谢! Most effective way to code SEO friendly URLs?

我希望 URL 具有可读性和用户友好性,但具有通用性,因此我可以在类别深度完全不同的不同网站上使用它。

脚本目前的作用: 如果你在浏览器栏中输入 www.domain.com/dev/topic1/topic2/topic3 通过 RewriteRule 将路径重写为 index.php,然后脚本从数据库中获取 topic3 并显示该特定主题的 HTML。 我需要 URLs 是小写的,我希望所有 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。希望那时没有重复的内容。 有没有更优雅的方法来做到这一点,你看到这个 idea/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= [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 均为大写且不以斜杠“/”结尾,则只需要一个重定向。