我正在使用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重写引擎访问我的数据库?
非常感谢, 问候。
答案 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参数。您需要确保您的数据库的名称字段已编入索引,因此您不会对每个页面请求执行表扫描。