【问题标题】:URL Rewrite GET parametersURL 重写 GET 参数
【发布时间】:2013-08-12 07:55:06
【问题描述】:

我希望我的网址如下所示

www.website.com/home&foo=bar&hello=world

我只想改变第一个get参数

但实际的“幕后”网址是这样的

www.website.com/index.php?page=home&foo=bar&hello=world

我找到的所有教程都更改了所有参数。

非常感谢任何帮助!

【问题讨论】:

  • 您的 URL 无效。它最多可以是 home?foo=... 因为必须有一个 ? 来分隔路径和查询字符串。
  • 这对我也有用,但我不知道该怎么做

标签: .htaccess mod-rewrite


【解决方案1】:

将此添加到您的网络根/ 目录中的.htaccess

RewriteEngine on
RewriteBase /

RewriteRule ^home$ index.php?page=home&%{QUERY_STRING} [NC,L]

如果您希望它适用于所有页面,即 /any-page 被用作 index.php?page=any-page 然后使用

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d # not a dir
RewriteCond %{REQUEST_FILENAME} !-f # not a file
RewriteRule ^(.*)$ index.php?page=$1&%{QUERY_STRING} [NC,L]


这些规则如何运作?

RewriteRule 具有以下语法

RewriteRule [Pattern] [Substitution] [Flags]

模式 可以使用正则表达式,并与主机名和端口之后的 URL 部分匹配(.htaccess 放置在根目录中),但在任何查询字符串之前。

第一条规则

^home$ 模式使第一条规则匹配传入的 URL www.website.com/home%{QUERY_STRING} 只是捕获 /home? 之后的任何内容并将其附加到内部替换的 URL index.php?page=home

标志NC 只是使规则不区分大小写,因此它也匹配/Home/HOME。而L 只是将其标记为最后一个,即重写应该在此处停止,以防下面定义了任何其他规则。

第二条规则

这个更通用,即如果您的所有网站页面都遵循这个 URL 模式,那么我们可以使用这个通用的,而不是为每个页面编写几条规则。

^(.*)$ 模式中的.*/any-page-name 匹配,括号有助于将any-page-name 部分捕获为$1 变量,在替换URL 中使用为index.php?page=$1page=home&page=$1& 中的 & 只是多个查询字符串字段-值对之间使用的分隔符。

最后,%{QUERY_STRING}[NC,L] 标志的工作方式与规则一中的相同。

【讨论】:

  • 解释会很好
  • @xcy7e 添加了解释:)
猜你喜欢
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 2012-04-03
  • 2021-10-01
相关资源
最近更新 更多