在我的网站上,当有人请求目录时,我希望它删除'/'并添加'.html'(当然减去引号)。
例:
如果有人转到domain.com/directory/
,则应该重定向到domain.com/directory.html/
并且应该代表相同的内容:domain.com/another-directory/
应该重定向到domain.com/another-directory.html
。
我想在我的htaccess
文件中放置一行(或两行)代码,使任何目录(以/
结尾的网址)重定向到URL.html
(删除{ {1}}当然)。
我还希望它可视化重定向,因此用户实际上会看到它更改为/
。
我是一名新手网络程序员,非常感谢任何帮助。
注意:我确实使用了.html
,但这确实有效,但这需要大量的额外编码,我更喜欢用一个简单的语句来覆盖所有目录。
答案 0 :(得分:1)
使用htaccess会有点困难,我假设您要执行以下操作:
第一个是直截了当的:
# check to make sure the request isn't actually for an html file
RewriteCond %{THE_REQUEST} !^([A-Z]{3,9})\ /(.+)\.html\ HTTP
# check to make sure the request is for a directory that exists
RewriteCond %{REQUEST_FILENAME} -d
# rewrite the directory to
RewriteRule ^(.+)/$ /$1.html [R]
第二部分很棘手
# check to make sure the request IS for an html file
RewriteCond %{THE_REQUEST} ^([A-Z]{3,9})\ /(.+)\.html\ HTTP
# See if the directory exists if you strip off the .html
RewriteCond %{DOCUMENT_ROOT}/%2 -d
# Check for an internal rewrite token that we add
RewriteCond %{QUERY_STRING} !r=n
# if no token, rewrite and add token (so that directories with index.html won't get looped)
RewriteRule ^(.+)\.html /$1/?r=n [L,QSA]
但是,如果您拥有的是一堆名为directory.html
,directory2.html
,directory3.html
等的文件,并且您希望在有人进入{{3}时这样做在他们的地址栏中,他们可以获得directory2.html
的内容,这将更加简单:
# check to make sure the request isn't actually for an html file
RewriteCond %{THE_REQUEST} !^([A-Z]{3,9})\ /(.+)\.html\ HTTP
# check to see if the html file exists (need to do this to strip off the trailing /)
RewriteCond %{REQUEST_URI} ^/(.+)/$
RewriteCond %{DOCUMENT_ROOT}/%1.html -f
# rewrite
RewriteRule ^(.+)/$ /$1.html [L]