[英]htaccess mod_rewrite
无论何时我去一个像这样的页面,我都想尝试一下这个:
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“部分。它必须是一个独特的元素,很像主键。所以请确保你有一个函数,它负责根据给定的字符串(例如帖子标题)创建slug并确保没有重复。
然后在你的.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。 然后,您需要使用传入的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.