PHP - 更改URL以隐藏查询字符串并显示页面标题

时间:2013-06-12 11:12:19

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

我有一些页面,目前有一个网址,如下所示:

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

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

我想知道的是,是否可以将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

原始网址正常,但不是新网址。

3 个答案:

答案 0 :(得分:1)

如果要在页面之间进行更改,则无法在URL中隐藏变量...如果“故事标题”对于每个页面都是唯一的(它是数据库中的主键),那么您可以简单地进行.htaccess重写并使用'story-title'作为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

答案 1 :(得分:0)

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

然后写下以下.htaccess代码

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

现在您可以从www.mydomain.com/directory/?id=123

访问www.mydomain.com/directory/story-title

答案 2 :(得分:0)

我并不准确地知道它,但这是我有一天读到的东西。

特殊字符串同时用作标题和ID。它也被称为&#34; slug&#34;。 Slugs在您的数据库中必须是唯一的。

结构:

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

所以你只需使用那个slu to来找到所需的文章。