4

我试图让我的网站将其他页面显示为 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文件等?

4

3 回答 3

9

首先,有官方文档。为了解决您的具体问题,我会这样做:

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/whatever/www.example.com/whatever.html

于 2012-05-05T09:03:27.443 回答
2
RewriteEngine on
RewriteBase /

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

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

于 2012-05-05T08:40:41.460 回答
1

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

于 2012-05-05T08:48:39.897 回答