【问题标题】:Clean URLs - How do I accomplish this?干净的 URL - 我如何做到这一点?
【发布时间】:2011-12-01 03:52:39
【问题描述】:

我的主管最近告诉我,与其使用类似 $pagecontent = "<html><body>blahblahlbahblah</body></html>" 的内容生成页面,不如从数据库中提取页面信息并使用干净的 URL。

如何使用干净的 URL?我以前从未这样做过,而且谷歌似乎有多个不同的答案,而且没有明确的答案。它是PHP的东西吗? HTML 的东西? Javascript 的东西?

【问题讨论】:

  • 您能提供有关您的设置的信息吗?你用的是什么网络服务器?上面运行的是什么软件?等
  • 你可能想问问你的主管,他所说的“干净的 URL”是什么意思,因为这不是一个定义的模式,也不是什么。

标签: php javascript html


【解决方案1】:

它通常是一个名为 mod_rewrite 的 .htaccess 文件,如果您使用的是托管在 Apache 下的网站(大多数情况下使用 PHP)。 .htaccess 文件的一个简单示例是:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) index.php?query=$1&%{QUERY_STRING}

因此,在本例中,http://example.com/aLink/?test=a 将被重定向到 http://example.com/index.php?query=aLink/&test=a

然后您可以使用 PHP 解析 $_GET['query'] 变量。

【讨论】:

    【解决方案2】:

    干净的 URL 通常使用 URL 重写来完成,它们将 site.com?var=1&var2=2 转换为 site.com/1/2

    在 Apache 服务器上,这是使用 mod_rewrite 完成的。您可以尝试使用 Wordpress,它会生成正确的 Apache 文件和代码,用于将 Wordpress 内容(如 ?page=name&category=that 改写为 /name)。

    【讨论】:

    • 更常见的是 site.com?var=1&var2=2 进入 site.com/var/1/var2/2 ,否则您将寻找某种需要预定义路由的路由系统。跨度>
    【解决方案3】:

    我认为他的意思是,而不是

    http://www.snoop.com/pages?id=3
    

    你宁愿有

    http://www.snoop.com/pages/snoop_is_the_best
    

    正如评论中提到的,根据网络服务器、网络应用程序设置,您可以免费获得它。 Apache 使用 mod_rewrite 表示例如

    【讨论】:

      【解决方案4】:

      使用 Apache 和 PHP,您也可以在不使用 mod_rewrite 的情况下完成此操作。这些天似乎没有人关心运行 mod_rewrite 所需的开销,但如果您有兴趣从 Web 服务器中榨取每一点性能,您可能会喜欢另一种方法。

      有关使用 Apache 的 ForceType 指令的解决方案的说明,请参阅 http://www.evolt.org/Making_clean_URLs_with_Apache_and_PHP

      【讨论】:

        【解决方案5】:

        干净的 URL 只是一个没有查询字符串的 URL。例如,您可能需要http://example.com/foo 而不是http://example.com/index.php?page=foo 对于想要迁移到干净 URL 的大型现有网站,它们可能会变得非常复杂。正如Matt H 和其他人所说,您可以使用 Apache rewrite 将现有 URL 更改为干净的 URL。 http://httpd.apache.org/docs/current/mod/mod_rewrite.html 有关于 mod_rewrite 的完整文档,但您可能会从示例中学习得更快。 jValdron 刚刚发布了一篇不错的文章。这个答案很快就变成了更快答案的混搭。有太多关于用 PHP 重写和处理它们的文档,以至于一个如此广泛的问题真的不值得再次回答。

        如果您有一个非常大的网站,其中包含许多带有查询字符串的 php 页面,那么您将不得不计划编写大量重写并确保您的链接不t 中断或单次重写将处理重定向到正确页面的脚本。

        如果您要创建一个新网站,我会将您的 URL 重写为一个脚本,该脚本将根据 URL 获取内容。

        这是 Drupal 的 .htaccess 文件中的一个著名示例。

        <IfModule mod_rewrite.c>
        RewriteEngine on
        # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !=/favicon.ico
        RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
        </IfModule>
        

        然后QSA 表示查询字符串追加和L 之前表示最后Stop the rewriting process immediately and don't apply any more rules.

        然后 index.php 可以通过 $_GET['q'] 访问 URL。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-05
          • 1970-01-01
          • 2016-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多