首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URL重写获取参数

URL重写获取参数
EN

Stack Overflow用户
提问于 2013-08-10 14:08:53
回答 1查看 45.8K关注 0票数 10

我希望我的url看起来像下面这样

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

我只希望更改第一个get参数

然而,实际的“幕后”url是这样的

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

我发现所有教程都会更改所有参数。

任何帮助都非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-10 14:24:49

将其添加到web根目录.htaccess中的/目录中。

代码语言:javascript
复制
RewriteEngine on
RewriteBase /

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

如果您希望这对所有页面都适用,例如/any-page作为index.php?page=any-page,那么请使用

代码语言:javascript
复制
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具有以下语法

代码语言:javascript
复制
RewriteRule [Pattern] [Substitution] [Flags]

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

第一条规则

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

标志NC使规则不区分大小写,因此它也与/Home/HOME匹配。L只是将其标记为最后一条,也就是说,如果下面定义了任何其他规则,那么重写应该停止在这里。

第二规则

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

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

最后,%{QUERY_STRING}[NC,L]标志的工作原理与第一条规则相同。

票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18162686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档