【问题标题】:Using nginx rewrite to hide or clean URLs?使用 nginx 重写来隐藏或清理 URL?
【发布时间】:2010-10-10 11:16:49
【问题描述】:

您好。

我一直在尝试理解正则表达式和重写,但我是新手。我有一个简单的站点,只有一个目录,我想要的只是将 domain.com/file.php?var=value 重写为 domain.com,确保用户在整个站点导航过程中只会在地址栏中看到 domain.com(即使我开始让网站变得更复杂)。

简单地说,它冻结了 url,虽然如果网站增长,我宁愿做一些“干净的 url”方法,但我仍然在基本 php,我觉得我必须在 http/1.1 上进行 rtfm

【问题讨论】:

    标签: nginx rewrite


    【解决方案1】:

    通常,这种“干净”的 URL 内容通常是通过整个网站的包装框架来完成的。浏览器只显示该框架的 URL,内容可以是任何内容。

    但我其实并不推荐,因为用户可能想为“脏”网址添加书签。

    这种类型的 URL 混淆会降低高级用户的可用性。

    别傻了,但我通常只在“艺术”网站上看到这种类型的 URL 混淆,这些网站更关心地址栏的外观而不是网站的可用性。恕我直言,通过增强可用性让用户满意是一种更好的长期方法。

    【讨论】:

    • 我猜这不是网站“艺术”,而是只是使用 Flash 并且不知道如何在 Flash 电影中进行更改会影响 url。这很棘手,需要 javascript 魔法。
    【解决方案2】:

    我猜冻结 url 是由营销需求驱动的,所以从营销的角度来看,这也是不利的:您的用户将无法通过 IM、电子邮件将指向他们喜欢的页面的链接发送给他们的朋友或 facebook,因此它实际上会降低您网站的吸引力,即使对于最无知的用户也是如此。

    【讨论】:

      【解决方案3】:

      我不(有意识地)认为在地址栏中显示 php 变量是安全的(尽管它们无论如何都会显示在某些浏览器的状态栏中......)。理想情况下,用户不会知道该网站在幕后使用的是什么——我正在为初学者配置错误页面。是的,对于美学也是如此。如果我可以重写到 domain.com/foo/bar 我会很高兴;假设 nginx 如果收到这样的请求会处理“转换回丑陋的 URL”,我认为它与位置指令有关。但是 domain.com/file.php?var1=value&var2=value 让我有点恼火,让我觉得我暴露了太多网站。

      不推荐使用框架(尤其是“搜索引擎的 cos”),并且我正在尝试坚持使用 xhtml 1.1 Strict(到目前为止还不错)。如果内容设计良好、易于导航、无论浏览器选择如何、直观等都可以访问...我想我可以忍受可爱的 URL :)

      我很乐意浏览任何关于良好网页设计技术、php、http/1.1 的 rtfm 材料以及任何让你感到“是的!这就是我一直在寻找的东西!”凌晨 4 点。

      谢谢:)

      [如果我对这个网站的理解正确,这应该是对原帖的回复,而不是回答......对不起]

      【讨论】:

      • 为什么 domain.com/foo/bar 与 file.php 有什么不同?var1=value&var2=value?很多网站都使用第一种形式,甚至是 MS 形式。但如果这就是你想要的,你可以为 nginx 编写一个正则表达式来将 file.php?var1=value 转换为 /file/var/value/
      【解决方案4】:

      你可以像这样使用 nginx 重写规则:

      rewrite  ^([^.]*)$  /index.php
      

      发送所有不包含“.”的请求到您的 index.php 脚本。在你的php脚本中,爆破请求url获取传递的参数,然后调用你想要的php页面:

      #URL /people/jack_wilson
      $url_vars = explode('/',$_SERVER['request_uri']); # array('','people','jack_wilson');
      $page = $url_vars[1];
      if($page == 'people'){
         $username = $url_vars[2];
         require('people.php'); #handle things from here.
      }
      

      【讨论】:

        【解决方案5】:

        您还可以研究一个 PHP 框架,例如 Code Igniter,它将为您处理所有 PHP 方面。

        http://codeigniter.com/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-30
          • 1970-01-01
          相关资源
          最近更新 更多