URL重写:";index.php?id=5“;至;home.html“;

URL重写:";index.php?id=5“;至;home.html“;,php,url-rewriting,Php,Url Rewriting,我正在使用php和“template.inc”类开发一个网站。 问题是,我想创建一个迷你cms,允许管理员使用以下mysql属性创建一个“html”页面: Table Name : Page ----------------- id :auto-icremented) name :varchar 在架构中,如果他创建了页码“5”,则url为 "ww.mywebsite.com/index.php?id=5". 但是,这不是很忙,所以,因为我在url重写方面非常糟糕,即使我读了很多教程,

我正在使用php和“template.inc”类开发一个网站。 问题是,我想创建一个迷你cms,允许管理员使用以下mysql属性创建一个“html”页面:

Table Name : Page
-----------------
id   :auto-icremented) 
name :varchar
在架构中,如果他创建了页码“5”,则url为

"ww.mywebsite.com/index.php?id=5".
但是,这不是很忙,所以,因为我在url重写方面非常糟糕,即使我读了很多教程,我还是想键入名称+“html”来访问页面

如果我们以

"www.mywebsite.com/index.php?id=5"
如果管理员创建了具有以下值的页面:

id   : 5
name : 'home'
我希望用户可以键入

"www.mywebsite.com/home.html" 
没有重定向,因为我希望最后一个url必须仍然出现并成为官方url

谢谢你的回答, 我知道如何将www.mywebsite.com/index.php?id=5重写为www.mywebsite.com/5.html。。。但问题是,首先,我想在前面得到“name”值,在我的示例中,name值是“home”(5=>“home”)。 如何使用url重写引擎访问数据库

多谢各位,
注意。

为此使用Apache URL重写。在这个网站上就有这样的例子。你也可以试试官方的

您需要确保数据库对名称强制唯一性,否则会出现问题

编辑


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

使用标准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>

重新启动发动机
#Base是主目录的URL路径
重写基/
重写规则^$/index.php[L]
#跳过真实文件和目录
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则。*/index.php[L]
然后使用
$\u SERVER['REQUEST\u URI']
找出用户在寻找什么。如果要使规则更具体,请修改
*
,如
*\.html

Zakaria

使用Renesis的重写规则后,
$\u SERVER['REQUEST\u URI']
将等于
'home.html'

尝试以下方法:
谢谢你的回答,我知道如何将www.mywebsite.com/index.php?id=5改写为www.mywebsite.com/5.html。。。但问题是,首先,我想在前面得到“name”值,在我的示例中,name值是“home”(5=>“home”)。如何使用url重写引擎访问我的数据库?您担心的ID太快了。URL重写无法访问您的数据库。PHP将需要这样做。因此,您只需重写所有内容,让PHP获取请求URI(“home.html”)并提取名称(“home”),然后在数据库中查找它。名称必须唯一。感谢您的回答,我知道如何将www.mywebsite.com/index.php?id=5重写为www.mywebsite.com/5.html。。。但问题是,首先,我想在前面得到“name”值,在我的示例中,name值是“home”(5=>“home”)。如何使用url重写引擎访问我的数据库?写完这篇文章后,我看到Zakaria最终接受了一个答案。在这里有更多的PHP帮助并没有什么坏处,我想:)谢谢,蕾妮丝!你提供了一个很好的起点。我也学会了如何用你的答案跳过真实的文件/目录:)+1作为你的答案!我就是这么做的!再次感谢;)
<?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'
)