2011-03-27 59 views
1

我想了解如何正确使用mod_rewrite。我在我的数据库中有一个标题和日期的职位。现在我使用mysite.com/post.php?id=3来检索我的发布数据并填充页面。我想要这样:mysite.com/2011/03/27/my-title-like-so/。我猜我必须查询我的数据库以外的东西,但我不知道。谁能帮忙?也许我看起来很简单。到目前为止,我有它像这样显示:mysite.com/post/2/,但这并没有太大的帮助:P不知道如何让mod_rewrite写入某种格式

谢谢!

回答

1

通常的做法是在URL中包含ID和标题/日期。这样,它看起来不错,搜索引擎,你仍然可以通过ID有效地检索它。作为一个例子,看看这个stackoverflow问题的URL。

http://stackoverflow.com/questions/5451267/not-sure-how-to-get-mod-rewrite-to-write-to-a-certain-format 

只是一个猜测,但该网址中的数字可能是生成的ID。所以,你使用ID,只是忽略了URL的其余部分,例如:

RewriteRule /questions/(\d+) question.php?id=$1 
1

如果你不希望在URL中包含的ID,那么我建议以下办法。

在您的“posts”表中,包含一个“url”(或“friendly”或其他)字段,其中包含您希望您的帖子可以被访问的url。插入帖子时,只需将所有非单词字符剥离并用“ - ”替换。

然后,当URL进入你的系统时,你可以直接将这个URL映射到“url”字段。

因此,使用您的示例,您的网址将是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] 

,并将其存储在$ _GET全球为'myvar'

然后你可以做任何处理该网址在PHP:

$url_string = my_sanitising_code($_GET['myvar']); 
$url_array = explode('/', $url_string); 

现在你有了一个URL的所有部分的数组,你可以随心所欲地做任何事情。

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的值来获取数据库并显示好的东西。

相关问题