【问题标题】:GET request without needing the ? at the endGET 请求而不需要 ?在末尾
【发布时间】:2018-02-23 22:10:32
【问题描述】:

我正在进一步开发我的登录系统,使其看起来更专业,我想知道如何将获取请求转换为简单的链接,使它们看起来更时尚?

例如,对于我的一个系统,用户可以通过转到 http://www.example.com/user?user=JimmyJones 来搜索其他人的个人资料

这一切都很好而且花花公子,但我认为它看起来不太好,而且由于某种我不知道的技巧,许多其他网站的链接中没有这个,如你所见,我已经得到了最后去掉 .php,这是使用一些非常简单的 htaccess 完成的。

但是我怎样才能将上面的链接更改为:

http://www.example.com/user/JimmyJones

非常感谢您花时间阅读本文,我真的希望有人能帮我解决我的小问题,我想在 .htaccess 中有一些方法可以做到这一点?

编辑:

以下是一些网站,它们只是按照我的意愿去做:

imgur.com/user/example

facebook.com/exampleuser

【问题讨论】:

标签: php .htaccess mod-rewrite get request


【解决方案1】:

您在根字典中创建.htaccess 文件,然后使用

RewriteEngine on

然后写你的规则,对于你的例子,它会是这样的

RewriteRule ^/?user/([^/]+)/?$ user?user=$1 [L,QSA]

所以一个完整的页面应该是这样的

RewriteEngine on
RewriteRule ^/?user/([^/]+)/?$ user.php?user=$1

只是为了你的例子。

【讨论】:

  • @Progrock 不,只是一个例子。
  • @Progrock 这实际上是我唯一确定的,可选的斜线。
【解决方案2】:

在 .htaccess 中假设 Apache Web 服务器启用了重写模块,如下所示:

RewriteEngine On
RewriteRule ^user/([a-zA-Z]+)$ user.php?user=$1 [L]

第一行说使用重写引擎。

第二个,说匹配一个开头(或者说是相对于包含文件夹的.htaccess)的url,模式'user'后跟一个斜杠并匹配任何字母字符的模式,直到字符串的结尾(不是包括额外的查询参数)。

L 标志基本上表示工作已完成。

如果 .htaccess 在公共根目录中:

//example.com/user/JimmieJones

将映射到:

//example.com/user.php?user=JimmieJones

但它不会匹配:

//example.com/user
//example.com/user/
//example.com/user/JimmieJones/
//example.com/user/Freddy_K9

请注意您的应用程序中的任何现有链接:

<a href="/user?user=JimmieJones">Visit Jimmie's Profile</a>

可能需要更新。使用上面的示例模式,如果没有您现有的规则,旧样式的 url(以前索引/书签)可能会失败。您可能需要调整模式或为旧样式设置重定向。

管理大量重定向和重写可能会让人头疼。我建议您注意您的网址名称间距。并记录下来。

我为别名/快捷方式/广告系列保留第一级模式。

//example.com/slug

如果可能的话,我会避免为您的用户个人资料网址这样做。

理想情况下,您希望以一致性为目标,并为 URL(带有关联的 http 方法)和资源(规范 url)一一对应。

【讨论】:

猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多