每当我去一个像这样的页面时,我都试图用这个来做点什么。
http://www.example.com/character.php?id=3
我希望mod重写将其更改为:
http://www.example.com/character/Jim_Carrey
当然,ID是字符名称的行......
对于那种例子......我试图使用它,但似乎没有得到htaccess的大部分产生,因为我没有真正使用.htaccess
。< / p>
答案 0 :(得分:5)
实际上是另一种方式:
在您的网站上,您可以按照希望的方式编写所有链接。例如http://www.site.com/character/Jim_Carrey
在数据库中添加字段, 俗称“slu”“或” “post_slug”指的是 Jim_Carrey“网址的一部分。必须 是一个独特的元素,在路上很多 主键。所以请确保你 有一个确实照顾的功能 基于a创建slu .. 给定字符串(帖子标题为 例子)并确保没有 重复。
然后在你的.htaccess(在根文件夹上)
之类的东西RewriteEngine On
RewriteRule ^character/([a-z0-9_\-]+)/$ character.php?slug=$1 [L,NC]
最后,在你的character.php中 脚本,你不做数据库查询 反对ID,但反对 post_slug字段。
答案 1 :(得分:3)
如果你只是使用角色的名字,那么下面的内容就可以了
RewriteRule ^ character /(.*)$ /character.php?slug=$1
网址为例如http://www.example.com/character/Jim_Carrey。然后,您需要使用传入的slug在数据库中查找角色的名称,因为您将无法使用ID来查找。
或者,如果需要,您可以在URL中包含ID:http:
RewriteRule ^ character /([0-9] +)/.*$ /character.php?id=$1
通过这种方式,您可以拥有http://www.example.com/character/3/Jim_Carrey之类的网址,其中包含字符名称(出于搜索引擎优化等原因等),以及您可以直接在数据库中查找的ID。
编辑您的第一个小PHP示例:
<?php
// ... database connection stuff here etc
$slug = $_GET["slug"];
// IMPORTANT: perform some data sanitization here
// I'm just going to make sure it's only letters, numbers and
// hyphens/underscores as an example.
$slug = preg_replace("/[^a-zA-Z0-9\-_]+/", "", $slug);
// Now look up in your database
// Ideally you'd have a slug column to compare this with, that you can fill
// when your record is created/updated
// You'd also be best off using bound parameters here, rather than directly
// adding the data into the query string. I personally use the MDB2 PEAR
// module but feel free to use whatever you normally use.
$qry = "SELECT * FROM characters WHERE slug='" . $slug . "'";
$result = mysql_query($qry, $db);
// do something based on this result, fail if none found
// or show details if OK etc
// ...
?>
希望这有帮助!与往常一样,尽可能使用绑定参数进行查询,并很好地执行用户数据的清理。 PEAR MDB2模块有一个很好的页面,介绍如何执行此操作here。
编辑2 快速而肮脏的设置: - )
.htaccess文件如下:
RewriteEngine On
RewriteRule ^character/(.*)$ /character.php?slug=$1
您的.htaccess文件最好位于您网站的根目录中。例如/ home / wayne / public_html /或从
匹配的网址为http://www.example.com/character/Jim_Carrey - 您的$ _GET数组中出现的短语“Jim_Carrey”为$ _GET [“slug”]。 NB 道歉,写道昨晚PHP困了以上,所以难怪$ _POST不会像GET请求一样工作:-)我现在已经更新了!
最后,您需要确保您的主机支持使用.htaccess文件。这个设置超出了SO的范围,因此任何Apache配置问题都是您最好在https://serverfault.com/
答案 2 :(得分:0)
我很确定你不能通过htaccess做到这一点。您需要在PHP中执行此操作,使用url(?id = 3)中的信息查询数据库,然后使用您从数据库中学到的内容调用Header Function。
答案 3 :(得分:0)
听起来您可以使用mod_rewrite rewritemap。