我正在尝试了解如何正确使用mod_rewrite。我的数据库中有帖子有标题和日期。现在我正在使用mysite.com/post.php?id=3来检索我的帖子数据并填充页面。我想这样:mysite.com/2011/03/27/my-title-like-so/。我猜我必须查询我的数据库以外的其他ID,但我不知道。有人可以帮忙吗?也许我看起来非常简单。到目前为止,我有这样的表现:mysite.com/post/2/,但这没有多大帮助:P
谢谢!
答案 0 :(得分:1)
通常的做法是在URL中包含ID和标题/日期。这样它对搜索引擎看起来很不错,你仍然可以通过ID有效地检索它。例如,查看此stackoverflow问题的URL。
http://stackoverflow.com/questions/5451267/not-sure-how-to-get-mod-rewrite-to-write-to-a-certain-format
只是猜测,但URL中的数字可能是生成的ID。因此,您使用ID并忽略URL的其余部分,例如:
RewriteRule /questions/(\d+) question.php?id=$1
答案 1 :(得分:1)
如果您不希望在网址中包含ID,那么我建议采用以下方法。
在“帖子”表格中,添加一个“网址”(或“友好”或其他内容)字段,其中包含您希望您的帖子被访问的网址。插入帖子时,只需删除所有非单词字符并将其替换为“ - ”。
然后,当网址进入您的系统时,您可以直接将此网址映射到“网址”字段。
因此,使用您的示例,您的网址为http://mysite.com/2011/03/27/my-title-like-so/ “url”字段将包含“my-title-like-so”。
您可以使用简单的重写规则,例如:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f # if requesting file that doesn't exist, use the rule below
RewriteCond %{REQUEST_FILENAME} !-d # if requesting a directory that doesn't exist, use the rule below
RewriteRule ^(.*)$ index.php?myvar=$1 [L,QSA]
这会将URL的内容放在域之后:
http://mysite.com/[catches everything here]
并将它作为'myvar'
存储在$ _GET全局中然后你可以在php中对该URL进行任何处理:
$url_string = my_sanitising_code($_GET['myvar']);
$url_array = explode('/', $url_string);
现在你有一个URL的所有部分的数组,你可以随心所欲地做任何事情。
答案 2 :(得分:1)
您必须捕获传递给引擎的值以提取所需的数据。所以:
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ fetch.php?year=$1&month=$2&day=$3&title=$4 [L]
应符合您的格式。
然后http://mysite.com/fetch.php
可以使用$_GET
的值来获取数据库并显示好的东西。