【问题标题】:How & Why Do Sites Differ With Their URL Handling? [closed]网站如何以及为什么在 URL 处理方面有所不同? [关闭]
【发布时间】:2013-01-07 03:05:11
【问题描述】:

我注意到许多网站,即使是成熟的网站,在处理 URL 的方式上也各不相同。

Stack Overflow: http://stackoverflow.com/questions/tagged/url+php
Google: https://www.google.com/search?q=url+handling
Facebook: http://www.facebook.com/userID
Normal PHP: http://example.com/page.php?param=1&other=2

Wordpress 可以轻松地在不同的 URL 结构之间进行更改。

我的第一个问题很简单:您如何改变您的网站处理 URL 的方式?我认为您必须设置某种htaccess 重写,但我不确定。

另外,在使用/ 传递参数的站点上,这些站点如何访问某个文件夹?我通常使用http://example.com/includes 来访问我的includes 文件夹,但如果我使用/ 来传递参数,我的网站怎么知道我要做什么?

我的第二个问题更重要:为什么网站会更改其 URL 结构?其背后的原理是什么?仅仅是为了独一无二吗?性能怎么样……服务器上哪一个最轻?还是它们没有真正的区别,公司只是认为某种结构在浏览器 URL 栏中看起来更好?

【问题讨论】:

  • 如何重写 URL:workingwith.me.uk/articles/scripting/mod_rewrite。这对 SEO 很有用,因为理论上搜索引擎不会索引 GET 参数。
  • 您似乎假设所有这些站点都在运行 PHP。这个问题太模糊了,需要太多讨论,但是 URL 映射大致类似于 API 的定义。许多不同的因素可能会影响被认为是最佳的:但明确定义界面是最终唯一实际重要的部分。
  • 听起来不是那种意思,我意识到服务器可以运行多种其他平台。我只是对 PHP 最熟悉,所以我用我对 PHP 的理解来展示我想问的问题。
  • 在实践中,您可能应该选择您最熟悉的内容,并且您应该提出更具体的实际问题。如果您正在寻找意识形态,您应该查找诸如 Clean URLs 和构建 RESTful API 之类的东西。一个好的起点是尝试真正了解如何利用 URL 本身:w3.org/Provider/Style/URI.html。如果没有首先分析瓶颈,也不必担心性能。

标签: php apache .htaccess url url-rewriting


【解决方案1】:

为了更彻底地解决您的问题,我想暂时将您的注意力从 Web 服务器转移到 HTTP 协议及其基本工作原理上。

HTTP 是一个非常简单的协议,由请求-响应模型组成。客户端(基本上是用户的浏览器)发送所谓的 HTTP 请求标头,该标头可能有也可能没有非空的 HTTP 请求正文。当您想访问像 https://stackoverflow.com/questions/tagged/url+php 这样的 URL 时,标头看起来像这样

GET /questions/tagged/url+php HTTP/1.1
Host: stackoverflow.com
Connection: keep-alive

请注意,在 HTTP 请求标头的第 1 行,您的浏览器为了发送到 stackoverflow 服务器而制定了整个行由 3 个非常简单的部分组成。

  1. 请求动词,通常类似于 GET 或 POST(但也可以是许多其他内容)。这告诉服务器您希望如何处理请求,以便它期望它响应。
  2. 请求路径,可以由主机愿意接受的任何路径加上客户端希望提供的任何可选查询字符串组成,通常需要进行 URL 编码。
  3. 发出请求的协议版本。这通常是 HTTP/1.1 或 HTTP/1.0。

此请求的第二行向服务器提供客户端打算通过此请求访问的主机名。

现在,在服务器端,一旦您的网络服务器收到此实际请求,它就可以选择处理该请求,但它可以随心所欲。但是,在任何常见的 apache/nginx/lighttpd Web 服务器设置中,您可能非常习惯的行为是客户端提供的路径必须与 document root 目录中的物理路径匹配。这远非真相。这只是您的 Web 服务器可以处理请求的一种方式。您可以选择告诉您的网络服务器以不同的方式处理每个请求。

例如,Apache 的 httpd Web 服务器提供 mod_rewrite,它可以告诉您的 Web 服务器重写请求 URI,以便服务器可以根据特定规则(例如正则表达式或给定条件集)将它们重定向到其他地方。

   <Directory />
            Options -Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            Allow from all

            RewriteEngine On
            RewriteBase /
            RewriteRule ^index\.php$ - [L]
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule . /index.php [L]
    </Directory>

以上是 WordPress 重写规则的一个非常简单的示例,它们通常为您提供一个 in .htaccess 文件,但我是从我的虚拟主机文件中获取的,这通常比使用 .htaccess 快得多。在您决定使用 .htaccess 之前,请务必先考虑将您想要放入 .htaccess 的任何内容放入您的 apache.conf 的 vhost Directory 指令中,因为它们是运行时文件,因此本质上较慢。一般来说,mod_rewrite 本身很慢,只能作为最后的手段使用。

在任何情况下,所有这些重写的东西都是重定向到您的网络服务器的任何请求,该请求位于该 vhosts'DocumentRoot 的根目录上,以重定向到您的 index.php 文件,然后该文件在内部处理请求以确定哪个该请求应包含的 PHP 脚本以及页面的呈现方式。

这只是穷人的做法。它通常被称为 front-controller 或 front-router。它只是充当请求 URI 和我们处理为任何给定请求 URI 呈现响应的实际方式之间的中间人。

如果您是 stackoverflow 或 google,您将拥有反向代理(基本上是负载平衡器),在更高级别处理这些请求,并连接到数据中心中的其他服务器,然后处理根据该请求 URI 呈现请求。

请记住,我们所做的只是获取客户端 HTTP 请求标头 的 GET /questions/tagged/url+php HTTP/1.1 部分并将其发送到另一个知道如何响应它的脚本或程序。就像您的网络服务器可以为您做的一样。

【讨论】:

    【解决方案2】:

    对于您的第一个问题,您网站中的某些文件夹未向用户显示。例如一些媒体文件。您将在您的 .htaccess 文件中执行此操作

    下面的代码将隐藏目录列表。如果用户将浏览器指向一个没有索引文件的目录,那么在这种情况下会出现 403 错误

    Options -Indexes 
    

    如果你想显示目录使用

    Options +Indexes
    

    查看此链接http://viralpatel.net/blogs/htaccess-directory-listing-enable-disable-allow-deny-prevent-htaccess-directory-listing/

    第二个问题 - 通常人们使用 URL Rewrite 的原因是因为SEO 友好的 URL。

    搜索时它出现在前面..

    例如,您有产品详细信息页面,并且您在查询字符串中传递产品 ID。重写会将查询字符串更改为带有斜杠的正确 URL。这对谷歌查找搜索结果很有帮助。

    RewriteEngine On
    RewriteRule ^products/([a-zA-Z]+)/([0-9]+)/$ index.php?product=$1&price=$2
    

    以下链接将对您有所帮助。

    http://zenverse.net/seo-friendly-urls-with-htaccess/

    http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

    【讨论】:

      猜你喜欢
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      相关资源
      最近更新 更多