【问题标题】:How does .htaccess work?.htaccess 如何工作?
【发布时间】: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 文件等?

【问题讨论】:

标签: apache .htaccess url mod-rewrite


【解决方案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 或其他。
猜你喜欢
  • 2011-12-15
  • 2019-04-02
  • 2010-10-16
  • 2011-12-02
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
相关资源
最近更新 更多