我试图把这个东西,每当我去一个页面,如:
http://www.example.com/character.php?id=3
我想要mod重写将其更改为:
http://www.example.com/character/Jim_Carrey
当然,ID是字符名称的行…
对于这样的例子…我尝试过使用它,但似乎并没有得到大部分的htaccess的生产,因为我没有使用.htaccess
真的很多。
实际上是相反的:
在您的网站上,您可以按照您希望的方式编写所有链接。 例如http://www.site.com/character/Jim_Carrey
在你的数据库中,你需要添加一个通常被称为“slug”或“post_slug”的字段,它指向了URL的Jim_Carrey部分,它必须是一个唯一的元素,就像主键一样。一个函数,确实照顾创建基于给定的字符串的slu((例如帖子标题),并确保没有重复。
然后在你的.htaccess(在根文件夹中)做类似的事情
RewriteEngine On RewriteRule ^character/([a-z0-9_\-]+)/$ character.php?slug=$1 [L,NC]
最后,在您的character.php脚本中,您不是针对ID进行数据库查询,而是针对post_slug字段。
如果你只使用角色的名字,那么像下面这样的东西就可以了
RewriteRule ^ character /(.*)$ /character.php?slug=$1
带有例如http://www.example.com/character/Jim_Carrey的URL。 您将需要使用传入的slu look查找数据库中的角色名称,因为您没有ID来查找它。
或者,如果您需要,可以在URL中包含该ID,例如:
RewriteRule ^ character /([0-9] +)/.*$ /character.php?id=$1
这样,你可以有一个像http://www.example.com/character/3/Jim_Carrey这样的URL,其中包括人物名称(对于SEO的原因等),但也可以直接在你的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模块在这里有一个很好的页面。
编辑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的范围,所以你最好在https://serverfault.com/上提问任何Apache配置问题
我相当肯定你不能通过htaccess来做到这一点。 您需要在PHP中执行此操作,使用来自url(?id = 3)的信息查询数据库,然后使用您从数据库中学到的内容调用Header Function 。
听起来像你可能能够使用mod_rewrite rewritemap 。