.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
RewriteCond
s 仅适用于以下规则。如果您有多个规则,则需要为每个规则编写条件。
现在,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 代码。有人可以解释它是如何工作的吗?