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

时间:2015-01-01 10:17:56

标签: php apache .htaccess mod-rewrite redirect

我正在尝试编写一个小型SEO优化网站,我已经很长时间没有编写php了,这是我在这里的第一篇文章。我已经得到了你们的大量帮助,谢谢! Most effective way to code SEO friendly URLs?

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

目前脚本的作用是什么: 如果您在浏览器栏中输入www.domain.com/dev/topic1/topic2/topic3 路径通过RewriteRule重写为index.php,然后脚本将topic3从数据库中取出并显示此特定主题的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 /

因此每个主题只有一个有效的唯一网址。希望没有重复的内容。 有没有更优雅的方式来做到这一点,你是否看到这个想法/ 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>

1 个答案:

答案 0 :(得分: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是大写的并且没有以斜杠'/'结尾。