【问题标题】:htaccess remove only '?' sign from URL with query stringhtaccess 仅删除“?”使用查询字符串从 URL 签名
【发布时间】:2012-08-08 22:29:18
【问题描述】:

如何使用查询字符串从 URL 中删除 ? 符号

【问题讨论】:

  • 谷歌搜索 mod_rewrite

标签: .htaccess query-string ssi


【解决方案1】:
RewriteEngine On

# This is to physically change what's in the browser's address bar using a client redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?([^\ ]+)
RewriteRule ^$ /%1? [R=301,L]

# This is to internally rewrite on the server side
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/?(.+)$ /?$1 [L]

另外请你解释一下[A-Z]{3,9}\ and ([^\ ]+) 本身是什么意思?我在哪里可以阅读有关构建此类结构的信息?

该正则表达式用于匹配 HTTP 请求,第一行将如下所示:

GET /path/to/file HTTP/1.1

第一个单词是 METHOD,长度可以在 3 到 9 个字符之间(因此是 {3,9},第二个单词是 unaltered 的 URI请求。这是经过重写引擎的,但在对其进行任何路径处理之前。最后一位是协议版本,有些可选,决定之后是否会有标头。

【讨论】:

  • @user1586029 抱歉,我忘记了规则目标末尾的?
  • @user1586029 当一个人说“我有这个 URL,我想要这个 URL”时,可能意味着两件事。通常,这意味着您有一些正在生成的 URL,并且需要在内部将其重写为可以处理“漂亮 url”的东西。如果你想重定向浏览器(物理上改变 URL 地址栏的内容),那是完全不同的事情。我已经编辑了答案以包含它。在此处查看说明:stackoverflow.com/a/11711948/851273
  • @user1586029 请看我的编辑,我的规则有错误,再试一次,也看看解释
  • @user1586029 是的,(.*) 应该是 (.+)
  • 在最后一个重写规则之前添加RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-d
猜你喜欢
  • 2021-08-18
  • 1970-01-01
  • 2017-06-01
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
相关资源
最近更新 更多