gpt4 book ai didi

apache - 引用:mod_rewrite,URL重写和“漂亮的链接”解释

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:42:57 27 4
gpt4 key购买 nike

“漂亮的链接”是一个经常被要求的话题,但很少有人完全解释。mod_rewrite是制作“漂亮链接”的一种方法,但它很复杂,语法非常简洁,很难理解,而且文档假定对http有一定的熟练程度。有人能简单地解释一下“漂亮的链接”是如何工作的,以及如何使用mod_rewrite来创建它们吗?
其他常见名称、别名、干净url的术语:restfulurl、用户友好url、seo友好url、slugg、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,则它可能会查看文件是否存在,如果存在,则会为其提供服务。如果文件以“.php”结尾,它将调用php解释器,然后返回结果。所有这些关联都是完全可配置的;一个文件不必以“.php”结尾,web服务器就可以通过php解释器运行它,url也不必与磁盘上的任何特定文件匹配。
mod_rewrite是一种重写内部请求处理的方法。当web服务器收到url /var/www/foo/bar.html的请求时,您可以将该url重写为其他内容,然后web服务器将在磁盘上查找与之匹配的文件。简单示例:
RewriteEngine On
RewriteRule /foo/bar /foo/baz

该规则规定,只要请求匹配“/foo/bar”,就将其重写为“/foo/baz”。然后将处理该请求,如同已请求 /foo/bar一样。这可以用于各种效果,例如:
RewriteRule (.*) $1.html

此规则匹配任何( /foo/baz)并捕获它( .*),然后将其重写为追加“.html”。换言之,如果 (..)是请求的url,它将被当作 /foo/bar已被请求一样处理。有关正则表达式匹配、捕获和替换的详细信息,请参见 http://regular-expressions.info
另一个经常遇到的规则是:
RewriteRule (.*) index.php?url=$1

这再次匹配任何内容,并将其重写为index.php文件,并在 /foo/bar.html查询参数中附加最初请求的url。也就是说,对于任何和所有传入的请求,将执行index.php文件,并且该文件将访问 url中的原始请求,因此它可以对其执行任何所需的操作。
主要是将这些重写规则放入web服务器配置文件中。apache还允许*将它们放入文档根目录中名为 $_GET['url']的文件中(即在.php文件旁边)。
*如果主apache配置文件允许;它是可选的,但通常是启用的。
mod_rewrite不做什么
mod廑rewrite并不能神奇地让所有的url变得“漂亮”。这是一个常见的误解。如果您的网站中有此链接:
<a href="/my/ugly/link.php?is=not&amp;very=pretty">

mod廑u rewrite没办法让它变得漂亮。为了使这成为一个漂亮的链接,您必须:
将链接更改为漂亮的链接:
<a href="/my/pretty/link">

使用服务器上的mod_rewrite使用上述任何一种方法处理对url .htaccess的请求。
(可以结合使用 /my/pretty/link来转换传出的html页面及其包含的链接。尽管这通常比更新html资源要费劲得多。)
有很多mod_rewrite可以做,而且可以创建非常复杂的匹配规则,包括链接多个重写、将请求代理到完全不同的服务或计算机、将特定的http状态代码作为响应返回、重定向请求等。它非常强大,可以用于如果你了解基本的http请求-响应机制,那就好好吃吧。它不会自动使你的链接漂亮。
有关所有可能的标志和选项,请参见 official documentation

关于apache - 引用:mod_rewrite,URL重写和“漂亮的链接”解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241393/

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