代码之家  ›  专栏  ›  技术社区  ›  fmsf

如何在php中重写URL?

  •  1
  • fmsf  · 技术社区  · 17 年前

    这是一个双重问题:正确答案将转到“如何在PHP中完成它”,解释是否有任何优势,如果可能的话,也会被考虑在内。

    我只是好奇,因为我真的不知道,我在网页上看到了很多。

    编辑:我不知道技术名称,但以Stackoverflow为例: " http://stackoverflow.com/posts/edit/522452 “这就是我的意思 “文件夹” (之前在问题标题中使用的术语)。

    5 回复  |  直到 11 年前
        1
  •  6
  •   Ben Blank Jarret Hardie    17 年前

    如果你指的是 /posts/edit/522452 -样式URL与 /posts.asp?action=edit&postid=522452 -样式URL(或后端的任何转换),这通常是通过URL重写器完成的,例如 mod_rewrite 该URL的规则可能如下:

    RewriteRule ^/posts/(\w+)/(\d+) /posts.asp?action=\1&postid=\2
    

    这种URL的两个主要优点是:

    1. “文件夹”类型的URL更容易让人输入和记忆。
    2. 该页面“看起来”像是HTTP代理的页面。传统上,代理不会缓存带有参数的页面,因为它们不代表单独的内容,并且变化太频繁(想想搜索结果)。使用“文件夹式”URL可以正常缓存它们。

    在PHP中,您可以通过以下方式访问这些选项 $_GET['action'] $_GET['postid'] ,就像浏览器要求重写表单一样。

        2
  •  2
  •   Gumbo    17 年前

    要使用这些URL,您必须执行三个步骤:

    1. 告诉你的Web服务器,这些请求应该重定向到你的PHP脚本。使用Apache,您可以使用 mod_rewrite module 为此:

      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule !^index\.php$ index.php [L]
      

      此指令将每个与文件系统中的文件不匹配的请求重定向到 index.php .

    2. 让脚本解析这些URL:

      $_SERVER['REQUEST_URI_PATH'] = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']);
      $segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));
      var_dump($segments);
      

      这可能是解析URL路径并获取每个路径段的最简单方法。

    3. 在输出中使用此URL。(琐碎)

        3
  •  1
  •   UncleZeiv    17 年前

    正如其他人指出的那样,出于SEO目的、缓存和可读性的考虑,我想补充一点,文件夹样式参数也是用户“玩弄”参数的一种激励。例如,在Stackoverflow上,当按标签过滤时,通常很容易手动编辑网址,而不是寻找合适的按钮并点击它。

        4
  •  0
  •   adamJLev    17 年前

    有几个原因,但主要是:

    • SEO目的。搜索引擎通常会忽略“?”之后的任何内容?“问号符号,从而让你的页面没有索引,甚至更糟糕的是,根本没有索引。”。

    • 可读性:

      www.somesite.com/products/devices/keyboards/20,asc
      www.somesite.com/products/devices/keyboards/20,asc.html
      

      看起来比:

      www.somesite.com?show=products&cat=devices&sub_cat=keyboards&sort=asc&items=20
      
    • 缓存。

    有关如何在Apache中执行此操作的信息: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

        5
  •  0
  •   Christoph    17 年前

    优点是可读性,可能在搜索引擎中有更好的位置。

    你可以通过以下方式实现这一点 mod_rewrite 如果你正在使用Apache。在PHP中,您还可以查看预定义的全局变量——我认为 $_SERVER['REQUEST_URI'] 可以,但可能有更好的。

    在不重写的情况下使用普通PHP时,您也可以删除 .php 如果您正确配置了服务器,并且仍然可以获得“漂亮”的URL,则可以从脚本的文件名中删除。