我有一个小数量的静态网站,我只是想隐藏.html扩展名的:
- 网址
/foo
获取静态文件/foo.html
- 该浏览器仍然显示的URL
/foo
然后,客户机可以在风格送出书签mydomain.com/foo
而非mydomain.com/foo.html
。
这听起来很简单,我已经使用mod_rewrite
愉快之前(与WordPress或重定向说的),但是这证明更难破解,我认为。 也许我失去了一些东西真的很明显,但我不能在任何地方找到一个解决方案,我一直在这一切的一天!
我们运行我们自己的服务器,所以这次能去的地方是最好的地方。
附录
下面检查的解决方案工作得很好。 随后一段时间运行后,现场我注意到两个问题:
所有页面开始出现无样式。 我重新加载,清除缓存等,但仍然没有风格。 我以前也有这样的烦恼,并不能找到源。
有一个目录,并命名为“画廊”的HTML文件,以便/画廊链接显示一个目录列表,而不是HTML文件。 我应该能够排序的那一个,但进一步的提示欢迎:-)
Answer 1:
试试这个规则:
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]
这将改写,可以追加当被映射到一个现有的文件中的所有请求.html
。
Answer 2:
以前的答案不检查请求的路径是一个目录。
这里是一个不重写,如果请求的路径是一个目录(如原题说明)的全部重写条件:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f # is an existing html file
RewriteRule ^(.*)$ $1.html # rewrite index to index.html
为了搜索引擎友好和避免双重内容,重定向的URL的.html:
# Redirects domain.com/file.html to domain.com/file
RewriteCond %{REQUEST_FILENAME} !-d # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f # is an existing html file
RewriteCond %{REQUEST_URI} ^(.+)\.html$ # request URI ends with .html
RewriteRule (.*)\.html$ /$1 [R=301,L] # redirect from index.html to index
如果您需要的脚本相同看看这里: 如何使用的.htaccess隐藏.PHP URL扩展?
Answer 3:
接受的解决方案做当网站配置了虚拟主机/文档根不工作。
还有就是我用的解决方案:
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]
Answer 4:
看看这个帖子http://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/我还没有尝试过,但似乎证明非常有说服力。
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Answer 5:
要删除.html
从扩展.*.html
请求,您可以使用下面的脚本root/.htaccess
:
RewriteEngine On
RewriteBase /
#1) externally redirect "/file.html" to "/file"
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=301,L]
#2) rewrite "/file" back to "/file.html"
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*?)/?$ $1.html [NC,L]
Answer 6:
这里是一个可以让我们的文件存储在磁盘上作为一个例子:
foo.html.php
但在浏览器中,将其称为
foo.html
为了使这项工作给你,我想你只需要稍作修改,以配合您现有的请求,并为您在地方与一个实际的文件.html
扩展。
# These are so we do not need the .php extension
RewriteCond %{REQUEST_FILENAME} (\.xul|\.html|\.xhtml|\.xml)$',
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f',
RewriteRule ^(.*)$ $1.php',
Answer 7:
哇,我很少见到了其中存在的网络,人们只是扔了什么“为他们工作”,但对其中很少花时间阅读文件,以找出它做什么这么多的“解决方案”这样一个问题。 许多这里给出的解决方案没有为虚拟主机的工作,例如。
经过大量交叉引用和阅读,我想贡献我自己的解决方案,“对我的作品”。 希望它为你工作了。 我没有从头创建; 我得到了所有的其他贡献(尽管其中大部分没有“我的工作”不加修改)的启发。
RewriteEngine on
#if foo requested, return foo.html contents
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.html -f
RewriteRule ^(.*)$ $1.html [L]
#redirect foo.html to foo
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.+)\.html$ $1 [R,L]
的[R]
通过默认标志做了临时(302)重定向; 如果你想有一个永久重定向,使用R=301
代替R
文章来源: How to hide the .html extension with Apache mod_rewrite