我希望我的url看起来像下面这样
www.website.com/home&foo=bar&hello=world
我只希望更改第一个get参数
然而,实际的“幕后”url是这样的
www.website.com/index.php?page=home&foo=bar&hello=world
我发现所有教程都会更改所有参数。
任何帮助都非常感谢!
发布于 2013-08-10 14:24:49
将其添加到web根目录.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]该模式可以使用正则表达式,并在主机名和端口( .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]标志的工作原理与第一条规则相同。
https://stackoverflow.com/questions/18162686
复制相似问题