【问题标题】:How to do URL rewriting in PHP and .htaccess files如何在 PHP 和 .htaccess 文件中进行 URL 重写
【发布时间】:2014-06-08 16:57:09
【问题描述】:

在我的 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 的友好 URL 规则?太清了。

【问题讨论】:

    标签: php .htaccess url url-rewriting friendly-url


    【解决方案1】:

    模式和替换

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

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

    http://www.pets.com/show_a_product.php?product_id=7 并且您想将它们更改为如下所示:

    http://www.pets.com/products/7/ 与其为每个产品 ID 编写规则,您当然更愿意编写一个规则来管理所有产品 ID。实际上,您想更改这种格式的 URL:

    http://www.pets.com/show_a_product.php?product_id={一个号码} 并且您想将它们更改为如下所示:

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

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

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

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

    因此,此 RewriteRule 现在意味着 Apache 将对 domain.com/products/{number}/ 的所有请求重定向到 show_a_product.php?product_id={same number}。

    来源:http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/

    谷歌请求:https://www.google.com/search?q=URL+mod-rewrite+htaccess

    【讨论】:

      猜你喜欢
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多