22

我想链接到我网站内的页面,例如:不是:mywebsite.com/about.html 但是:mywebsite.com/about/

我见过各种网站这样做,但看起来他们对事情的反应也不同:

Apple.com:apple.com/iphone/works,apple.com/iphone/index.html 有效,apple.com/iphone 重定向。

Opera.com:opera.com/mobile/ 重定向,opera.com/mobile 有效,opera.com/mobile.html无效

Mozilla.com:mozilla.org/en-US/ 有效,mozilla.org/en-US 重定向,mozilla.org/en-US/index.html无效

这就引出了另一个问题:有不同的方法吗?

编辑: Apple 似乎对每个页面都使用了一个文件夹,例如一个名为“iphone”的文件夹,里面有一个 index.html 文件?但是 Opera 和 Mozilla 在 .htaccess 文件中使用了一些东西?

4

6 回答 6

20

删除扩展

要从 PHP 文件中删除 .php 扩展名,例如 yoursite.com/wallpaper.php 到 yoursite.com/wallpaper,您必须在 .htaccess 文件中添加以下代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

如果您想从 html 文件中删除 .html 扩展名,例如 yoursite.com/wallpaper.html 到 yoursite.com/wallpaper,您只需更改上面代码的最后一行以匹配文件名:

RewriteRule ^([^\.]+)$ $1.html [NC,L]

而已!您现在可以链接 HTML 文档中的页面,而无需添加页面的扩展名。例如:

 <a href="http://whatever.com/wallpaper" title="wallpaper">wallpaper</a>
于 2016-03-12T21:19:54.693 回答
12

他们正在使用.htaccessURL rewriting。这是服务器配置的一部分。你不能只用 html 来做。

本页介绍URL 重写的基础知识。

于 2013-06-04T13:46:23.670 回答
7

然后,您的文件夹必须包含一个文件:index.*. 比如:/iphone/index.html,也可以是/iphone/

或与.htaccess

于 2013-06-04T13:47:13.750 回答
3

在站点根文件夹的 .htaccess 文件中,只需添加以下行:

# ---- Render pages without urls
Options +MultiViews
于 2017-07-06T17:29:36.860 回答
2

最受欢迎的答案不检查 URL 是否指向目录,因此当它尝试将“.html”附加到目录路径时,您会遇到一些神秘的“未找到”错误。轻松修复:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]

只有当路径不指向有效目录时,第一个条件才会通过。仅当添加 .html 扩展名时路径指向有效文件时,第二个才会通过。如果两个条件都通过,重写规则只需将“.html”添加到文件名中。

请注意,我们可以将整个路径与.*. 如果您愿意,您可以拒绝包含句点字符的路径,但这并不是必需的,因为您已经检查过该{REQUEST_FILENAME}.html文件是否有效。在任何情况下,当句点字符在字符类中时,都没有必要对其进行转义。我知道你[^\.]到处都能看到,但是斜线是多余的。[^.]是如何编写它并且看起来像一个正则表达式专业人士。

这种重定向对用户是不可见的,因为默认情况下,mod_rewrite 在内部进行替换,而不通知浏览器。如果您想进行永久重定向,您可以在末尾添加 [R=301] 标志。


或者,正如 Genus Amar 所说,您可以通过将此选项指令添加到 .htaccess 文件来在每个目录的基础上启用Multiviews选项:

Options +MultiViews

值得补充的是,这仅在服务器管理员使用AllowOverride Directive启用 MultiViews 时才有效,并且不允许您执行其他重定向。


.html如果它是请求的 URL 的一部分,这些解决方案(单独)都不会删除它。如果您也想这样做,请参阅这个问题的回答。

于 2020-01-13T06:38:52.003 回答
-1

使您的 href 属性等于您要链接的页面或 .. 如果您需要向上移动目录。

例如:href="contact.html" 例如:href="../links/contact.html"

于 2017-07-06T22:02:18.590 回答