我想链接到我网站内的网页,例如: 不是: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文件中使用了什么东西?
答案 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)
他们正在使用.htaccess
和URL 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 answer至this question。