0

我试图了解 URL 重写是如何工作的。我有以下链接。

mysite.com/profile.php?id=23

我想用用户的名字和姓氏重写上面的 url。

mysite.com/directory/liam-gallagher

从我读过的内容来看,您指定了应该输出 url 的规则,但是如何查询我的表以获取每个用户名?

对不起,如果这很难理解,我自己也糊涂了!

4

3 回答 3

6

你从错误的方向看这个。你不能做那种自动 url 重写。最好的方法是创建一个全面的 url 重写:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

并为数据库中的用户创建一个特定的名称,该名称将用作 url。

+---------+----------+------+-----------+----------------+
| user_id | username | name | surname   | url            |
+---------+----------+------+-----------+----------------+
|      23 | liam     | Liam | Gallagher | liam-gallagher |
+---------+----------+------+-----------+----------------+

现在,当有人访问您的 时http://mysite.com/directory/liam-gallagher,您可以阅读最后一个条目并user_id在您的数据库中找到 ,然后让您的脚本完成剩下的工作。

另一种方式是Pekka建议的。创建一个类似的 urlhttp://mysite.com/directory/23/liam-gallagher并从链接中读取 id。但我个人不喜欢那种网址。在我看来,它们只是快速/懒惰的解决方法。

于 2012-10-19T10:51:10.643 回答
0

类似的东西(只是一个草稿,适应你自己的需要......):

RewriteEngine On
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L]
于 2012-10-19T10:49:56.500 回答
0

我使用的一种方法如下。

制定重写规则,例如

mysite.com/directory/(.*)

重定向到:

mysite.com/profile.php?user=%1

将 %1 作为从规则中捕获的参数。

然后从配置文件页面上的查询参数中获取用户,并从数据库中获取该用户的 ID。

http://httpd.apache.org/docs/current/mod/mod_rewrite.html

于 2012-10-19T10:50:20.953 回答