htaccess:如何删除文件扩展名,添加尾部斜杠,并可能保留样式?

时间:2013-09-07 10:22:15

标签: .htaccess file-extension trailing-slash

我试图用htaccess屏蔽html和shtml文件的文件扩展名。我对htaccess了解不多,我设法做的是删除扩展名,将尾部斜杠添加到shtml页面,然后停在那里。我想在html文件中添加尾部斜杠,但是我对这个主题的研究让我无处可去。看起来我要么生成一个带有两个斜杠的url,要么是一个带有伪目录,斜杠和文件扩展名的url, 或者由于一些奇怪的原因而失去了页面的风格。

我基本上尝试了所有我知道的事情。这就是我所拥有的:

#this redirects idex.html to http://mysite.com

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://%{HTTP_HOST}/ [R=301,L]

#remove file extension

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html 

# if I try this (.*)/$ $1.html the page loses its style 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.shtml -f
RewriteRule ^(.*)/$ $1.shtml 

#the code above for shtml files works properly
#force trailing slash and remove file ext. This produces error


#RewriteCond /%{REQUEST_FILENAME}.html -f
#RewriteRule ^([a-zA-Z0-9_-\s]+)/$ /$1

##the code below is perfect (retrieved on StackExchange)

#RewriteCond %{REQUEST_URI} (.*)/$
#RewriteCond %{REQUEST_FILENAME}\.html -f
#RewriteRule (.*)/$ $1.html [L]


#especially if combined with this, but pages lose their style
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME}\.html -f 
#RewriteRule .* %{REQUEST_FILENAME}/ [R=301,L]

有没有办法添加尾部斜杠并保持页面样式?我确定有一个,但我似乎无法找到它...提前致谢

1 个答案:

答案 0 :(得分:0)

要保留您的样式,请更改指向绝对URI的链接(以/开头)或将其添加到页眉:

<base href="/" />

您无法获取样式的原因是浏览器将URI基础附加到相对URL。所以说浏览器加载这个页面:

http://yourdomain.com/foo/

重写规则会在内部将URI重写为/foo.html,但浏览器仍然认为它正在加载/foo/。额外的斜杠意味着相对URI基数不再是/,而是/foo/。因此,对于所有相关链接,浏览器会将/foo/附加到开头。如果您指定相对URI基数为/,那么浏览器将只添加/(就像非尾随斜杠页一样)。