将Mod_rewrite用于短URL

时间:2013-06-17 19:45:11

标签: .htaccess mod-rewrite

我正在尝试使用mod重写来使我的网址变短。有人告诉我可以用htaccess实现吗?

虽然我是php / mysql的新手,但我会尝试通过谷歌和我有限的知识解决自己的问题。但是我对htaccess一无所知,所以我正在寻求一些帮助。

我的用户个人资料位于

http://www.mysite.com/user/index/169

其中169是用户id

如何将其更改为mysite.com/username?

我使用的脚本已经使用mod_rewrite创建目录

/ user / index不是物理文件夹。

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果您的用户名和ID值存储在MySQL数据库中,那么Apache无法将用户名转换为数字ID。 (您可以使用RewriteMap进行此转换,但它会变得混乱和脆弱。)

相反,您可以让Apache将用户名转发到PHP脚本,然后让该PHP脚本为该用户名提供内容。 (因为PHP可以查询MySQL数据库。)

一旦您编写了一个基于用户名提供用户配置文件的PHP脚本(例如,称之为show_profile.php),您就可以使用Apache在.htaccess文件中使用以下内容调用此脚本。顶级公共目录:

RewriteRule ^user/([a-zA-Z0-9_-]+)$ show_profile.php?username=$1

这会向www.mysite.com/user/ExampleUser_1981发送/show_profile.php?username=ExampleUser_1981请求,以便您可以使用$_GET['username']预定义的请求变量读取PHP脚本中的用户名值。

请注意,此模式允许用户名包含小写(a-z),大写(A-Z),数字(0-9),下划线和连字符。但是,自定义模式以仅允许允许出现在您网站上的用户名中的那些字符。

我不建议只使用www.mysite.com/username模式,因为这意味着您必须添加规则来检查请求是否不适用于实际文件,我认为使用该模式看起来更整洁/ user / username pattern。