URL重写:“index.php?id = 5”到“home.html”

时间:2010-02-18 22:13:00

标签: php url-rewriting

我正在使用php和“template.inc”类开发一个网站。 问题是我想创建一个mini-cms,允许管理员创建一个带有这些mysql属性的“html”页面:

Table Name : Page
-----------------
id   :auto-icremented) 
name :varchar

在架构中,如果他创建了页码“5”,则网址为

"ww.mywebsite.com/index.php?id=5".

但是,这并不是非常有趣,因为即使我阅读了很多教程,我也很难重写网址,我想输入名称+“html”来访问该页面。

如果我们以

为例
"www.mywebsite.com/index.php?id=5"

如果管理员创建了包含以下值的页面:

id   : 5
name : 'home'

我希望用户可以输入

"www.mywebsite.com/home.html" 

并且没有重定向,因为我希望最后一个网址仍然必须出现并成为官方网址。

感谢您的回答, 我知道如何将www.mywebsite.com/index.php?id=5重写为www.mywebsite.com/5.html ...但问题是我首先需要获得“名称”谷在我的例子中,名称值是“home”(5 =>'home')。 如何使用url重写引擎访问我的数据库?

非常感谢, 问候。

3 个答案:

答案 0 :(得分:5)

使用标准Wordpress安装中的.htaccess文件将所有内容重定向到一个PHP文件。像这样......

<IfModule mod_rewrite.c>
    RewriteEngine On
    # Base is the URL path of the home directory
    RewriteBase /
    RewriteRule ^$ /index.php [L]

    # Skip real files and directories
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* /index.php [L]
</IfModule>

然后使用$_SERVER['REQUEST_URI']找出用户正在寻找的内容。如果您想使规则更具体,请修改.*,例如.*\.html

答案 1 :(得分:4)

扎卡瑞亚,

使用Renesis的重写规则后,$_SERVER['REQUEST_URI']将等于'home.html'

尝试类似:

<?php

// clean
$page = mysql_real_escape_string($_SERVER['REQUEST_URI']);

// make query
$query = sprintf("select Page.* from Page where name = '%s'", $page);

// find page ID
if($result = mysql_query($query)){

  $page = mysql_fetch_assoc($result);

  echo "<pre>", print_r($page, true), "</pre>";
}

?>

可能的输出

Array (
  [id]    => 5
  [name]  => 'home.html'
)

答案 2 :(得分:1)

使用Apache URL重写。仅此网站上有many many个例子。您也可以尝试官方Apache rewriting docs

您需要确保您的数据库在名称上强制执行唯一性,否则您将遇到问题。

修改

让index.php采用name =参数而不是id参数。您需要确保您的数据库的名称字段已编入索引,因此您不会对每个页面请求执行表扫描。