1

我想知道是否应该使用 .htaccess 将 get 变量更改为数据库中的值(用户名)。

所以如果有

http://www.url.com/user.php?u=1

你怎么把它转换成

http://www.url.com/andrewliu

谢谢!

4

3 回答 3

3

您需要将您的更改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]
于 2012-08-26T18:33:44.267 回答
3

您需要使用 Mod-ReWrite。你可以在你的 htaccess 文件中使用它,但是如果你可以访问你的 httpd.conf 文件,它会被证明在那里更快。

理想情况下,您会在 htaccess 文件中使用 ?u=1 并使用它来查找名称并将名称附加到末尾。否则,您将不得不搜索用户名,并且可能会出现拼写错误等。

RewriteRule ^/([0-9]+)/.*$ /user.php?u=$1 [L]

Stackoverflow 就是这样做的,尝试在没有 url 中的数字的情况下访问此页面,您将得到一个 404 页面未找到。输入正确的数字,您在正斜杠后输入的任何其他内容都将换成正确的单词!这样方便多了!

于 2012-08-26T18:37:39.617 回答
0

在 php 中使用 $GET 来获取 'u' 的值

然后使用您的逻辑将其转换为名称。

现在只需使用重定向功能转到该 URL

于 2012-08-26T18:33:10.707 回答