Dav*_*itt 43 apache mod-rewrite friendly-url url-rewriting
我有一些静态网站,我只想隐藏.html扩展名:
/foo获取静态文件/foo.html/foo然后客户端可以发送风格的书签mydomain.com/foo而不是mydomain.com/foo.html.
这听起来非常简单,mod_rewrite之前我曾经愉快地使用过(比如使用WordPress或重定向),但事实证明这更难破解.也许我错过了一些非常明显的东西,但我无法在任何地方找到解决方案而且我整天都在这里!
我们运行自己的服务器,所以这可以去哪里是最好的地方.
附录
下面检查的解决方案工作正常.然后在运行该网站一段时间后,我注意到两个问题:
所有页面都开始显得格格不入.我重新加载,清除缓存等,但仍然没有风格.我以前遇到过这个麻烦,找不到来源.
有一个目录和一个名为'gallery'的html文件,因此/ gallery链接显示了一个目录列表而不是html文件.我应该可以排序那个,但欢迎进一步提示:-)
Gum*_*mbo 50
试试这条规则:
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]
Run Code Online (Sandbox Code Playgroud)
这将重写所有可以在追加时映射到现有文件的请求.html.
Ste*_*ter 34
以前的答案不会检查请求的路径是否是目录.
如果请求的路径是目录(如原始问题所述),这里是不重写的完全重写条件:
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
Run Code Online (Sandbox Code Playgroud)
要成为SEO友好并避免双重内容,重定向.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
Run Code Online (Sandbox Code Playgroud)
如果脚本需要相同的内容,请看这里: 如何使用.htaccess隐藏.php URL扩展?
小智 12
当网站配置了虚拟主机/文档根时,接受的解决方案不起作用.
有我使用的解决方案:
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61043 次 |
| 最近记录: |