我想知道是否应该使用 .htaccess 将 get 变量更改为数据库中的值(用户名)。
所以如果有
http://www.url.com/user.php?u=1
你怎么把它转换成
http://www.url.com/andrewliu
谢谢!
您需要将您的更改user.php
为使用用户名而不是用户 ID。然后你可以使用类似的东西:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([a-z0-9_-]+)/?$ /user.php?u=$1 [L]
这通过u
查询字符串参数传递用户名,本质上是:/user.php?u=andrewliu
否则 htaccess 和 mod_rewrite 无法知道 user_id 和 username 之间的映射是什么。或者,您可以编写数据库脚本并使用RewriteMap为您创建映射:
RewriteMap usermap prg:/path/to/userscript
并在您的 htaccess 中:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([a-z0-9_-]+)/?$ /user.php?u=${usermap:$1} [L]
最后一个选项,如果您只有 5 个用户(或少量用户),您可以进行显式重写:
RewriteEngine On
RewriteRule ^/?andrewliu$ /user.php?u=1 [L]
RewriteRule ^/?anotheruser$ /user.php?u=2 [L]
RewriteRule ^/?foousername$ /user.php?u=3 [L]
您需要使用 Mod-ReWrite。你可以在你的 htaccess 文件中使用它,但是如果你可以访问你的 httpd.conf 文件,它会被证明在那里更快。
理想情况下,您会在 htaccess 文件中使用 ?u=1 并使用它来查找名称并将名称附加到末尾。否则,您将不得不搜索用户名,并且可能会出现拼写错误等。
RewriteRule ^/([0-9]+)/.*$ /user.php?u=$1 [L]
Stackoverflow 就是这样做的,尝试在没有 url 中的数字的情况下访问此页面,您将得到一个 404 页面未找到。输入正确的数字,您在正斜杠后输入的任何其他内容都将换成正确的单词!这样方便多了!
在 php 中使用 $GET 来获取 'u' 的值
然后使用您的逻辑将其转换为名称。
现在只需使用重定向功能转到该 URL