如何链接到没有.html扩展名的页面?

时间:2013-06-04 13:44:29

标签: html html5

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

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

Apple.com: apple.com/iphone/ works,apple.com/iphone/index.html works,apple.com/iphone redirects。

Opera.com: opera.com/mobile/ redirects,opera.com/mobile works,opera.com/mobile.html 工作。

Mozilla.com: mozilla.org/en-US/有效,mozilla.org / en-US redirects,mozilla.org / en-US / index.html 工作。

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

修改 似乎Apple为每个页面使用一个文件夹,例如一个名为'iphone'的文件夹里面有一个index.html文件? 但是Opera和Mozilla在.htaccess文件中使用了什么东西?

6 个答案:

答案 0 :(得分:14)

删除扩展程序

要从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>

答案 1 :(得分:7)

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

page解释了网址重写的基础知识。

答案 2 :(得分:5)

然后,您的文件夹必须包含一个文件:index.*。 喜欢:/iphone/index.html,可以是/ iphone /以及

或使用.htaccess

答案 3 :(得分:1)

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

# ---- Render pages without urls
Options +MultiViews

答案 4 :(得分:0)

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

例如:href =&#34; contact.html&#34; 例如:href =&#34; ../ links / contact.html&#34;

答案 5 :(得分:0)

The most upvoted answer不会检查URL是否指向目录,因此当它尝试将'.html'追加到目录路径时,您将得到一些神秘的'not found'错误。轻松修复:

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

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

请注意,我们可以将整个路径与.*相匹配。如果愿意,可以拒绝包含句点字符的路径,但是由于您已经检查{REQUEST_FILENAME}.html是有效的文件,因此这实际上不是必需的。无论如何,在字符类中都不必转义句号。我知道您到处都能看到这个[^\.],但是斜杠是多余的。 [^.]是如何编写它并使其看起来像正则表达式专业版的方式。 ?

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


或者,就像Gens Amar所​​说的那样,您只需将每个Options Directive添加到.htaccess文件中,就可以按目录启用 Multiviews 选项:

Options +MultiViews

值得补充的是,只有在服务器管理员已使用AllowOverride Directive启用MultiViews的情况下,此方法才有效,并且不允许您执行其他重定向。


这两个解决方案(单独)都不会删除.html(如果它属于请求的URL)。如果您也想这样做,请参见my answerthis question