htaccess mod_rewrite

我试图把这个东西,每当我去一个页面,如:

http://www.example.com/character.php?id=3 

我想要mod重写将其更改为:

 http://www.example.com/character/Jim_Carrey 

当然,ID是字符名称的行…

对于这样的例子…我尝试过使用它,但似乎并没有得到大部分的htaccess的生产,因为我没有使用.htaccess真的很多。

实际上是相反的:

  1. 在您的网站上,您可以按照您希望的方式编写所有链接。 例如http://www.site.com/character/Jim_Carrey

  2. 在你的数据库中,你需要添加一个通常被称为“slug”或“post_slug”的字段,它指向了URL的Jim_Carrey部分,它必须是一个唯一的元素,就像主键一样。一个函数,确实照顾创建基于给定的字符串的slu((例如帖子标题),并确保没有重复。

  3. 然后在你的.htaccess(在根文件夹中)做类似的事情

     RewriteEngine On RewriteRule ^character/([a-z0-9_\-]+)/$ character.php?slug=$1 [L,NC] 
  4. 最后,在您的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配置问&#x9898;

我相当肯定你不能通过htaccess来做到这一点。 您需要在PHP中执行此操作,使用来自url(?id = 3)的信息查询数据库,然后使用您从数据库中学到的内容调用Header Function 。

听起来像你可能能够使用mod_rewrite rewritemap 。