【问题标题】:PHP - Alter URL to hide querystring and display page title insteadPHP - 更改 URL 以隐藏查询字符串并改为显示页面标题
【发布时间】:2013-06-12 19:53:11
【问题描述】:

我选择了一些页面,它们当前的 url 看起来像这样:

www.mydomain.com/directory/?id=123

这将显示来自 id 为 123 的 mySQL 表中的故事。

我想知道的是是否可以将 URL 的外观更改为如下所示:

www.mydomain.com/directory/story-title

我有以下页面代码...

<?php 

header('Content-type: text/html; charset=utf-8'); 
include $_SERVER['DOCUMENT_ROOT'].'/con.php';
$id = $_GET['id'];
$query = "SELECT * FROM mytable WHERE id = $id";
$result = $mysqli->query($query);

if ($mysqli->error) {
   printf("Errormessage: %s\n", $mysqli->error);
}

$row = $result->fetch_array(MYSQLI_BOTH);

echo $row['title'];

?>

我的 .htaccess 文件中包含以下内容:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^directory/(.*)/?$ /directory/index.php?id=$1

原始 URL 可以正常工作,但新 URL 不行。

【问题讨论】:

  • “故事标题”是独一无二的吗?也就是说,能不能作为ID使用?
  • 好点...也许应该改为/123-story-title...这将通过在前面添加主键来确保它是唯一的。
  • 不不,那看起来不太好。我正在为你写一个答案,给我几分钟
  • 为此,您需要使用 .htaccess 文件。这是how to use .htaccess file for url rewriting 的一个很好的例子。

标签: php mysql .htaccess mod-rewrite url-rewriting


【解决方案1】:

如果 URL 中的变量要从一个页面更改为另一个页面,则不能隐藏它...如果每个页面的“故事标题”是唯一的(它是数据库中的主键),那么您可以简单地做一个.htaccess重写并使用'story-title'作为id。

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^directory/(.*)$ directory/page.php?story=$1

但是,如果 'story-title' 不是唯一的,那么您将不得不实现一种不同类型的重写,该重写使用 id 并显示故事标题。 SO 是如何做到的。

以下内容将改写:

www.domain.com/directory/ID/STORY_TITLE/

www.domain.com/directory/page.php?id=ID

.htacess(未测试):

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^directory/(.*)/(.*)/?$ directory/page.php?id=$1&story=$2

【讨论】:

  • 好的,我已经这样做了,但是当我尝试新的 URL 时,我得到了一个 404 页面。还有什么我需要改变的,或者是我的主人不允许这种事情吗?
  • @Tom 查看我的编辑。我在 URL 的末尾添加了 / 选项。也可能有其他错误。最好的办法是调试它:-) 这应该是一个很好的起点......
  • 关于查看为什么我得到标准服务器“找不到页面”页面的最佳方法的任何提示?我不知道我哪里出错了?我还需要在我的 htaccess 文件中添加什么吗?
  • @Tom 您需要检查代码并确保一切正确,例如页面名称、目录名称等
  • 查看我帖子中的编辑...我看不出哪里出错了。
【解决方案2】:

将故事标题存储在数据库中并在 URL 中传递 (story=story-title) 而不是 id=123

然后编写以下 .htaccess 代码

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^directory/(.*)$ directory/index.php?story=$1

现在您可以从www.mydomain.com/directory/story-title 访问www.mydomain.com/directory/?id=123

【讨论】:

    【解决方案3】:

    我不太清楚,但这是我有一天读到的东西。

    一个特殊的字符串同时用作标题和ID。它也被称为“蛞蝓”。 Slug 在您的数据库中必须是唯一的。

    结构:

    Title       | Text     | Slug            | ID
    ------------+----------+-----------------+--------
    "Big title" |"HTML etc"| "story-title"   | 5
    

    因此,您只需使用该 slug 即可找到所需的文章。

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多