繁体   English   中英

htaccess mod_rewrite

[英]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“部分。它必须是一个独特的元素,很像主键。所以请确保你有一个函数,它负责根据给定的字符串(例如帖子标题)创建slug并确保没有重复。

  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。 然后,您需要使用传入的slug在数据库中查找角色的名称,因为您将无法使用ID来查找。

或者,如果需要,您可以在URL中包含ID,vis:

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模块有一个很好的页面,在这里有如何做到这一点

编辑2快速而肮脏的设置:-)

.htaccess文件如下:

RewriteEngine On
RewriteRule ^character/(.*)$ /character.php?slug=$1
  • 您的.htaccess文件最好位于您网站的根目录中。 例如/ home / wayne / public_html /或者从哪里提供索引文件

  • 匹配的URL将是http://www.example.com/character/Jim_Carrey - 在$ _GET数组中出现的短语“Jim_Carrey”为$ _GET [“slug”]。 NB道歉,写道昨晚PHP困在上面,所以难怪$ _POST不会像GET请求一样工作:-)我现在已经更新了!

  • 最后,您需要确保主机支持使用.htaccess文件。 这个设置超出了SO的范围,因此任何Apache配置问题都是您最好在https://serverfault.com/上提出的问题。

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

听起来你可以使用mod_rewrite rewritemap

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM