0

我有一些页面当前有一个看起来像这样的 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。

4

3 回答 3

1

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

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

但是,如果“故事标题”不是唯一的,那么您将不得不实现一种不同类型的重写,该重写使用 id 但也显示故事标题。究竟是如何做到的。

以下将重写此:

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
于 2013-06-12T11:23:03.310 回答
0

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

然后编写以下 .htaccess 代码

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

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

于 2013-06-12T11:17:28.350 回答
0

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

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

结构:

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

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

于 2013-06-12T11:20:30.060 回答