gpt4 book ai didi

apache - 引用:mod_rewrite,URL重写和“漂亮链接”说明

转载 作者:行者123 更新时间:2023-11-30 22:23:27 25 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服务器的简单请求,从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还允许*将它们放入文档根目录(即.php文件旁边)中名为 .htaccess的文件中。

*如果主要的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重写和“漂亮链接”说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039831/

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