.htaccess 如何工作?

Posted

技术标签:

【中文标题】.htaccess 如何工作?【英文标题】:How does .htaccess work? 【发布时间】:2012-05-14 16:04:34 【问题描述】:

我正在尝试让我的网站将其他页面显示为 www.example.com/pageone/ 链接,而不是 www.example.com/pageone.html

问题是,我正在阅读使用 .htaccess 的方法,这让我很困惑,因为我不理解这些命令。

不过,我知道第一步是将其写入 .htaccess 文件中:

RewriteEngine On

在这一步之后,我完全不知道什么是 !-d 或 REQUEST_FILENAME 或 ^(.*) 以及所有的编程文本。有没有可以参考的文档?

或者任何人都可以给我一个关于如何配置.htaccess文件的简单解释,以了解如果我想去

www.example.com/pageone.html

,我只需要在 URL 中输入

www.example.com/pageone/

还有 php 文件等?

【问题讨论】:

..我使用谷歌,仅供参考——我认为只是我的关键字有点迟钝。我似乎找不到关于此的任何文档 您要使用的关键字是mod_rewrite: httpd.apache.org/docs/2.2/mod/mod_rewrite.html 【参考方案1】:
RewriteEngine on
RewriteBase /

RewriteRule ^([^/]+)$ /$1.html

这应该是您重写所需的全部内容。它基本上说“任何不是正斜杠的东西都将分配给变量$1。所以/foo 将指向/foo.html

【讨论】:

OP 想要解释它是如何工作的。给出答案很好,但如果 OP 不理解他想要的方式,那将毫无价值。 这就是我在 41 分钟前的评论中链接到文档的原因 :) 对,什么是 RewriteBase /?这是否意味着它只是在 URL 的后面添加一个 / ?【参考方案2】:

官方文档可以看这里Apache httpd mod_rewrite。 在 Google 上,您可以使用 url rewriting tutorial 等关键字进行搜索。 奇怪的字符被称为正则表达式。这不是一个容易学习的部分,但有很多关于它们的教程。 PS:这不是一个直截了当的答案,而是一些可以让您进一步了解 url 重写的工作原理的东西。

【讨论】:

相当基本的答案,但仍然相关。【参考方案3】:

首先是 Official Documentation。为了解决您的具体问题,我会这样做:

RewriteEngine on #Turn on rewrite

RewriteCond %REQUEST_FILENAME !-f #If requested is not a filename...
RewriteCond %REQUEST_FILENAME !-d #And not a directory
RewriteRule ^([^/]+)/?$ /$1.html [L] #Preform this redirect

RewriteConds 仅适用于以下规则。如果您有多个规则,则需要为每个规则编写条件。

现在,Apache 服务器匹配请求的路径(www.example.com/ 之后的所有内容),以查看它是否匹配您指定的任何规则。在这种情况下,只有一个:

^([^/]+)$

此正则表达式匹配任意数量的字符,这些字符不是斜杠/,后跟可选的斜杠。如果找到匹配项,它会将请求重写为第二个参数:/$1.html$1 表示“括号之间匹配的内容”,在我们的例子中是所有非斜杠字符。

[L] 标志告诉重写引擎在匹配此规则时停止查找规则。

所以总结一下,www.example.com/<strong>whatever/</strong> 将在服务器端悄悄地重写为www.example.com/<strong>whatever</strong>.html

【讨论】:

对,我想我要开始更多地了解这个 mod_rewrite 东西了。感谢您的链接和解释! 嗯,我也可以为 PHP 做这个吗?或者任何其他的扩展? @RenoYeo:这是 Apache 的东西,它属于您正在运行的服务器。如果您希望 PHP(即服务器端语言)控制事物,您将所有 URL 重写为 PHP 中的单个入口点,然后从那里控制事物。 (将 www.example.com/some/pages/ 重定向到 www.example.com/index.php?route=some/pages/ 并使用 PHP 控制)。 不在 php 中,对于 php - 我的意思是 .php、.aspx 等中的扩展,我希望它们都简化为 www.example.com/examplefile/ 而不是 www.example .com/examplefile.aspx 等 是的,它就是这样工作的。只需将 HTML 替换为 PHP 或其他。

以上是关于.htaccess 如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

这是 WordPress 中的 .htaccess 代码。有人可以解释它是如何工作的吗?

使用 cPanel 和插件域时 htaccess 如何工作

如何编写 .htaccess 文件以使 CodeIgniters URL 路由工作?

如何在 Nginx 中使用 .htaccess 文件?

.htaccess 重写失败,不确定如何排除故障

如何通过 htaccess 显示 PHP 错误 [重复]