如何创建一个SEO友好的URL来合并PHP变量/代码片段?

时间:2011-04-24 18:38:54

标签: php .htaccess seo rewrite

我有以下PHP代码,这是我正在使用的文件名,作为我为观众提供的每次下载的页面标题。我希望能够拥有SEO友好的标题和URL。

<?php echo $file_info[21]; ?>

每个网页的网址与此类似:

http://site.com/directory/download_interim_finder.php?it=ZWtkaW1rcmInbn1ma3h9aXFLcHN6fWVzeDgnISJoO3tran0reW97cSd1YHR5YHZIbWBmfzxwY3tiOnxycnA8Y25zfWpna3Y+YXtlZnl7dnJLf3J8cWd2fT4kJCIramFbcm1tbWRqdHJmJnR2ZGhKd3JpdShQdGV+bX09fWh0b2JnfXx9anV2J3F7YHh4d3Z2S3Jyf3ZmdX8pNyg1anZ/bnhpdGJwVnx5cXF5Zn5bYW14cHp2bTQiKXFsYw==

我想将这个长URL转换为更友好的SEO,并将上面指定的php代码包含在“filename.php”中,而不是您在此处看到的长URL。

我希望使用.htaccess,但我读过你不能通过那里去做。我花了几个小时寻找解决方法,找不到解决方案。任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用PHP和.htaccess mod重定向创建具有动态内容的SEO友好URL的逐步说明。友情网址可提高您的网站搜索引擎排名。在尝试此操作之前,您必须在httpd.conf中启用mod_rewrite.so模块。只需几行PHP代码就可以将标题数据转换为干净的URL格式。

<强>数据库

示例数据库博客表列id,title,body和url。

CREATE TABLE `blog`
(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`title` TEXT UNIQUE,
`body` TEXT,
`url` TEXT UNIQUE,
);

<强> Publish.php

包含PHP代码。将标题文本转换为友好的url格式并存储到博客表中。

<?php
include('db.php');
function string_limit_words($string, $word_limit)
{
  $words = explode(' ', $string);
  return implode(' ', array_slice($words, 0, $word_limit));
}

if($_SERVER["REQUEST_METHOD"] == "POST")
{
  $title = mysql_real_escape_string($_POST['title']);
  $body = mysql_real_escape_string($_POST['body']);
  $title = htmlentities($title);
  $body = htmlentities($body);
  $date = date("Y/m/d");

  //Title to friendly URL conversion
  $newtitle = string_limit_words($title, 6); // First 6 words
  $urltitle = preg_replace('/[^a-z0-9]/i', ' ', $newtitle);
  $newurltitle = str_replace(" ", "-", $newtitle);
  $url = $date . '/' . $newurltitle . '.html'; // Final URL

  //Inserting values into my_blog table
  mysql_query("insert into blog(title,body,url) values('$title','$body','$url')");
}

?>
<!--HTML Part-->
<form method="post" action="">
  Title:
  <input type="text" name="title"/>
  Body:
  <textarea name="body"></textarea>
  <input type="submit" value=" Publish "/>
</form>

<强> Article.php

包含HTML和PHP代码。显示博客表中的内容。

<?php
include('db.php');
if($_GET['url'])
{
  $url  =mysql_real_escape_string($_GET['url']);
  $url = $url . '.html'; //Friendly URL
  $sql = mysql_query("select title,body from blog where url='$url'");
  $count = mysql_num_rows($sql);
  $row = mysql_fetch_array($sql);
  $title = $row['title'];
  $body = $row['body'];
}
else
{
 echo '404 Page.';
}
?>
<!-- HTML Part -->
<body>
  <?php
  if($count)
  {
    echo "<h1>$title</h1><div class='body'>$body</div>";
  }
  else
  {
    echo "<h1>404 Page.</h1>";
  }
  ?>
</body>

<强>的.htaccess

网址重写文件。将原始网址9lessons.info/article.php?url=test.html重定向到9lessons.info/test.html

RewriteEngine On

RewriteRule ^([a-zA-Z0-9-/]+).html$ article.php?url=$1
RewriteRule ^([a-zA-Z0-9-/]+).html/$ article.php?url=$1

答案 1 :(得分:0)

当我查看您发布的网址示例时,我会看到两件事:

  • 它指向一个PHP脚本: /directory/download_interim_finder.php
  • 它有一个(看起来像一个)Base64编码的参数,显然没有人可以阅读

我猜你的下载脚本的输入是用it-argument字符串编码的,你需要将它放在URL中,否则你无法识别要下载的文件。由于您希望您的URL是语义的,因此您必须将您的语义信息添加到URL中。

例如,您可以制作以下网址:

/download/documentation/productX/[[Base64encodedinputstring]]

在你的.htaccess中你需要规则:

RewriteEngine On
RewriteRule /download/.*/([^\/]+) /directory/download_interim_finder.php?it=$2

如果您的主机不允许您使用.htaccess,则您无法轻松部署语义网址。