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