URL重写GET参数

詹姆斯·康纳

我希望我的网址如下所示

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

我只想更改第一个get参数

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

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

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

任何帮助,不胜感激!

拉维(Ravi K Thapliyal)

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

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]


这些规则如何运作?

ARewriteRule具有以下语法

RewriteRule [Pattern] [Substitution] [Flags]

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

第一法则

该模式^home$使第一个规则与传入的URL匹配www.website.com/home%{QUERY_STRING}经过简单的捕获和附加任何东西/home?到内部取代的URL index.php?page=home

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

第二条规则

这只是一个更通用的方法,即,如果您的所有网站页面都遵循此URL模式,那么与其编写多个规则(每个页面一个规则),不如编写一个通用的规则。

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章