我正在尝试编写一个小型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>
答案 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是大写的并且没有以斜杠'/'结尾。