htaccess mod_rewrite

时间:2010-02-02 22:27:41

标签: php apache http .htaccess mod-rewrite

每当我去一个像这样的页面时,我都试图用这个来做点什么。

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

我希望mod重写将其更改为:

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

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

对于那种例子......我试图使用它,但似乎没有得到htaccess的大部分产生,因为我没有真正使用.htaccess。< / p>

4 个答案:

答案 0 :(得分:5)

实际上是另一种方式:

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

  2. 在数据库中添加字段, 俗称“slu”“或” “post_slug”指的是 Jim_Carrey“网址的一部分。必须 是一个独特的元素,在路上很多 主键。所以请确保你 有一个确实照顾的功能 基于a创建slu .. 给定字符串(帖子标题为 例子)并确保没有 重复。

  3. 然后在你的.htaccess(在根文件夹上)

    之类的东西
    RewriteEngine On
    RewriteRule ^character/([a-z0-9_\-]+)/$ character.php?slug=$1 [L,NC]
    
  4. 最后,在你的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