我希望我的网址如下所示
www.website.com/home&foo=bar&hello=world
我只想要改变第一个get参数
然而实际的“幕后”网址是这个
www.website.com/index.php?page=home&foo=bar&hello=world
我找到的所有教程都会更改所有参数。
非常感谢任何帮助!
答案 0 :(得分:33)
将此添加到您的网络根.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]
Pattern 可以使用正则表达式,并在主机名和端口(在根目录中放置.htaccess
)之后,但在任何查询之前与URL的部分匹配字符串。
模式^home$
使第一个规则与传入的网址www.website.com/home
匹配。 %{QUERY_STRING}
只会抓取/home?
之后的任何内容并将其附加到内部替换的网址index.php?page=home
。
标记NC
只是使规则不区分大小写,因此它也匹配/Home
或/HOME
。并且L
只是将其标记为最后一次,即如果下面定义了任何其他规则,则重写应停在此处。
这个更通用,即如果您的所有网站页面都遵循此网址模式,那么我们可以只使用此通用网页,而不是编写多个规则,每个网页都有一个规则。
模式.*
中的^(.*)$
与/any-page-name
匹配,括号有助于将any-page-name
部分捕获为替换网址中使用的$1
变量{ {1}}。 index.php?page=$1
和&
中的page=home&
只是多个查询字符串字段值对之间使用的分隔符。
最后,page=$1&
和%{QUERY_STRING}
标记与规则1中的标记相同。