【问题标题】:Remove question mark from query string using .htaccesss使用 .htaccess 从查询字符串中删除问号
【发布时间】:2021-11-02 07:09:27
【问题描述】:

我的网址中的内容是https://www.example.com/?id=987456 我可以使用$id = $_GET['id'];显示从数据库中获取的所有用户数据

现在我只想删除 ?id=,这样 URL 就可以了。

所需的 URL 类似于 https://www.example.com/987456

注意。我在同一个域中有很多其他文件、文件夹和子文件夹,所以这些文档不能受到影响。

我必须得到 987456 的值,这样我才能根据它显示用户内容。

如果它可以与.htaccess一起使用就更好了 我正在使用带有 PHP 7.4 版本的 LiteSpeed Web 服务器 只是我不想让用户看到这个?id=

我怎样才能实现这个想法。

请帮帮我?

提前感谢您的帮助。

【问题讨论】:

标签: javascript php .htaccess redirect


【解决方案1】:

需要发生两件完全不同的事情。首先,您需要从外部重定向浏览器以在 URL 地址栏中显示不同的内容。其次,当浏览器重新发送第二个请求时,服务器内部会重写查询字符串。您不能随意添加或删除 URL 中的东西,因为它们是定位器。您可以创建一个新定位器,告诉浏览器使用这个新定位器而不是旧定位器,然后在服务器内部将新定位器改回旧定位器。

top part of this answer for an explanation

让浏览器转到新的 URL:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(index\.php)?\?([^&\ ]+)
RewriteRule ^ /%1? [L,R=301]

这需要一个 URL 请求:http://example.com/?something 并将浏览器重定向到 URL:http://example.com/something

然后你需要在内部重写它:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L]

当请求http://example.com/something 时,服务器将URI 重写为/index.php?something。这是服务器内部的,因此浏览器对此一无所知,并会在服务器处理 URI /index.php?something 时继续显示 URL http://example.com/something

【讨论】:

  • 我尝试将这些代码分别添加到我的 .htaccess RewriteEngine On RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(index\.php)?\?([^&\ ]+) RewriteRule ^ /%1? [L,R=301]RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?$1 [L] 中,但不幸的是它不起作用。我有 Litespeed 网络服务器
  • “首先,您需要从外部重定向浏览器” - 首先,OP 需要实际更改整个站点的内部链接。 “外部重定向”仅适用于搜索引擎(如果旧 URL 已编入索引)和指向旧 URL 的现有反向链接。否则,它将带来糟糕的用户体验,并可能对 SEO 不利。您还缺少重写 URL 中的 id= URL 参数名称。但否则+1,很好的答案:)
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 2023-04-10
  • 2016-10-05
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
相关资源
最近更新 更多