gpt4 book ai didi

apache - 引用: mod_rewrite, URL重写和 "pretty links"解释

转载 作者:行者123 更新时间:2023-12-03 04:26:37 24 4
gpt4 key购买 nike

“漂亮的链接”是一个经常被要求的话题,但很少被完全解释。 mod_rewrite是制作“漂亮链接”的一种方法,但它很复杂,而且语法非常简洁,难以理解,而且文档假定对 HTTP 有一定的熟练程度。有人可以用简单的术语解释“漂亮链接”的工作原理以及如何使用 mod_rewrite 来创建它们?

其他常用名称、别名、干净 URL 的术语:RESTful URL,用户友好的 URL,SEO - 友好的 URL,slugging , 和 MVC URL(可能用词不当)

最佳答案

要了解 mod_rewrite 是什么,您首先需要了解 Web 服务器的工作原理。 Web 服务器响应 HTTP requests .最基本级别的 HTTP 请求如下所示:

GET /foo/bar.html HTTP/1.1

这是浏览器对 Web 服务器的简单请求,请求 URL /foo/bar.html从它。重要的是要强调它不请求文件,它只请求一些任意的 URL。该请求也可能如下所示:
GET /foo/bar?baz=42 HTTP/1.1

这与对 URL 的请求一样有效,并且更明显地与文件无关。

Web 服务器是一个监听端口的应用程序,接受来自该端口的 HTTP 请求并返回响应。 Web 服务器可以完全自由地以它认为合适的任何方式/以您配置它响应的任何方式响应任何请求。此响应不是文件,而是 HTTP 响应,可能与任何磁盘上的物理文件有关,也可能无关。 Web 服务器不一定是 Apache,还有许多其他 Web 服务器都只是持久运行的程序,并连接到响应 HTTP 请求的端口。你可以自己写一个。本段旨在让您摆脱 URL 直接等同于文件的任何概念,这对于理解非常重要。 :)

大多数 Web 服务器的默认配置是在硬盘上查找与 URL 匹配的文件。如果服务器的文档根目录设置为 /var/www ,可以看看文件 /var/www/foo/bar.html如果存在并提供服务。如果文件以“.php”结尾,它将调用 PHP 解释器,然后返回结果。所有这些关联都是完全可配置的;文件不必以“.php”结尾,Web 服务器才能通过 PHP 解释器运行它,并且 URL 不必与磁盘上的任何特定文件匹配才能发生某些事情。

mod_rewrite 是一种重写内部请求处理的方法。当 Web 服务器收到对 URL /foo/bar 的请求时,您可以将该 URL 重写为其他内容,然后 Web 服务器将在磁盘上查找与之匹配的文件。简单的例子:
RewriteEngine On
RewriteRule /foo/bar /foo/baz

这条规则说,每当请求匹配“/foo/bar”时,将其重写为“/foo/baz”。然后该请求将被处理为好像 /foo/baz已被要求代替。这可用于各种效果,例如:
RewriteRule (.*) $1.html

此规则匹配任何内容( .* )并捕获它( (..) ),然后将其重写为附加“.html”。换句话说,如果 /foo/bar是请求的 URL,它将被处理为 /foo/bar.html已被要求。见 http://regular-expressions.info有关正则表达式匹配、捕获和替换的更多信息。

另一个经常遇到的规则是:
RewriteRule (.*) index.php?url=$1

这再次匹配任何内容并将其重写到文件 index.php,并将最初请求的 URL 附加在 url 中。查询参数。即,对于传入的任何和所有请求,文件 index.php 将被执行,并且该文件将有权访问 $_GET['url'] 中的原始请求。 ,因此它可以随心所欲地做任何事情。

首先,您将这些重写规则放入您的 Web 服务器配置文件中。 Apache 还允许*您将它们放入名为 .htaccess 的文件中。在您的文档根目录中(即在您的 .php 文件旁边)。

* 如果主 Apache 配置文件允许;它是可选的,但通常启用。

mod_rewrite 不做什么

mod_rewrite 不会神奇地使您的所有 URL 变得“漂亮”。这是一个普遍的误解。如果您的网站中有此链接:
<a href="/my/ugly/link.php?is=not&amp;very=pretty">

mod_rewrite 无法使它变得漂亮。为了使它成为一个漂亮的链接,您必须:
  • 将链接更改为漂亮的链接:
    <a href="/my/pretty/link">
  • 在服务器上使用 mod_rewrite 处理对 URL /my/pretty/link 的请求使用上述任何一种方法。

  • (可以结合使用 mod_substitute 来转换传出的 HTML 页面及其包含的链接。尽管这通常比仅仅更新 HTML 资源更费力。)

    mod_rewrite 可以做很多事情,你可以创建非常复杂的匹配规则,包括链接多个重写、将请求代理到完全不同的服务或机器、返回特定的 HTTP 状态代码作为响应、重定向请求等。它非常强大,可用于如果您了解基本的 HTTP 请求-响应机制,那就太好了。它不会自动使您的链接变得漂亮。

    official documentation对于所有可能的标志和选项。

    关于apache - 引用: mod_rewrite, URL重写和 "pretty links"解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20563772/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com