如何在PHP和.htaccess文件中重写URL

如何在PHP和.htaccess文件中重写URL,php,.htaccess,url,url-rewriting,friendly-url,Php,.htaccess,Url,Url Rewriting,Friendly Url,在我的PHP项目中,有几种类型的URL,如: example.com/f/a/somefile.php?a=x example.com/f/a/somefile.php?a=x&b=y example.com/f/a/somefile.php?a=x&b=y&c=z example.com/f/somefile.php?a=x example.com/f/somefile.php?a=x&b=y example.com/f/somefile.php?a=x&b=y&c=z example.co

在我的PHP项目中,有几种类型的URL,如:

  • example.com/f/a/somefile.php?a=x

  • example.com/f/a/somefile.php?a=x&b=y

  • example.com/f/a/somefile.php?a=x&b=y&c=z

  • example.com/f/somefile.php?a=x

  • example.com/f/somefile.php?a=x&b=y

  • example.com/f/somefile.php?a=x&b=y&c=z

  • example.com/somefile.php?a=x

  • example.com/somefile.php?a=x&b=y

  • example.com/somefile.php?a=x&b=y&c=z


重写上述URL的最佳方法是什么?有没有任何方法可以重写适用于上述所有URL的frienldy URL规则?。TQ.

模式和替换

上面的规则允许您重定向对单个URL的请求,但是当您开始根据URL包含的模式识别和重写URL组时,mod_rewrite的真正威力就来了

假设您想要更改上面第一对示例中描述的所有站点URL。您现有的URL如下所示:

你想把它们改成这样:

当然,您更愿意编写一条规则来管理所有产品ID,而不是为每个产品ID编写一条规则。实际上,您希望更改此格式的URL:

{一个数字} 你想把它们改成这样:

{一个数字}/ 为此,您需要使用“正则表达式”。这些模式是以特定格式定义的,服务器可以适当地理解和处理。识别数字的典型模式如下所示:

[0-9]+ 方括号包含一系列字符,“0-9”表示所有数字。加号表示该模式将识别加号之前的一个或多个数字-因此该模式实际上意味着“一个或多个数字”-这正是我们在URL中查找的内容

默认情况下,规则的整个“模式”部分被视为正则表达式-您根本不需要打开或激活它

重写规则^products/([0-9]+)/?$show_a_product.php?product_id=$1[NC,L]#处理产品请求 我希望您注意到的第一件事是,我们已经将模式用括号括起来了。这允许我们在下面的“替换”部分中“返回引用”(参考返回)URL的该部分。替换中的“$1”告诉Apache此时将与前面括号中模式匹配的内容放入URL中。你可以有很多反向引用,它们是按照它们出现的顺序编号的

因此,这个重写规则现在意味着Apache重定向domain.com/products/{number}/的所有请求,以显示_a_product.php?product_id={same number}

资料来源:

谷歌请求: