我正在尝试了解URL重写的工作原理。我有以下链接。
mysite.com/profile.php?id=23
我想用用户的名字和姓氏重写上面的网址。
mysite.com/directory/liam-gallagher
从我读过的内容中,您指定了应该输出url的规则,但是如何查询我的表以获取每个用户名?
很抱歉,如果这很难理解,我自己也很困惑!
答案 0 :(得分: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>
并在db中为用户创建一个特定名称,用作URL。
+---------+----------+------+-----------+----------------+
| user_id | username | name | surname | url |
+---------+----------+------+-----------+----------------+
| 23 | liam | Liam | Gallagher | liam-gallagher |
+---------+----------+------+-----------+----------------+
现在当有人访问您的http://mysite.com/directory/liam-gallagher
时,您可以阅读最后一个条目并在您的数据库中找到user_id
并让您的脚本完成剩下的工作。
另一种方式是建议Pekka。创建一个类似http://mysite.com/directory/23/liam-gallagher
的网址,并从链接中读取ID。但我个人不喜欢那种网址。在我看来,它们只是快速/懒惰的解决方法。
答案 1 :(得分:0)
像(只是草稿,适应你自己的需要......):
RewriteEngine On
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L]
答案 2 :(得分:0)
我使用过的一种方法如下:
制定重写规则,例如
mysite.com/directory/(.*)
重定向到:
mysite.com/profile.php?user=%1
将%1作为从规则中捕获的参数。
然后从配置文件页面上的查询参数中获取用户,并从数据库中获取该用户的ID。