.htaccess在删除.html后重写强制尾随斜线

时间:2016-01-24 00:09:55

标签: .htaccess mod-rewrite

我的htaccess文件中有以下代码:

Options -Indexes
RewriteEngine On

# Redirect external .php requests to extension less url
RewriteCond %{THE_REQUEST} ^(.+)\.html([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.html$ http://%{HTTP_HOST}/foo/$1 [R=301,L]

# Resolve .html file for extension less html urls
RewriteRule ^([^/.]+)$ $1.html [L]

当我去www.mydomain.com/foo/index whithout .html时工作正常。我希望在索引结束时强制尾随斜线,但我不知道如何

是否有人知道如何修改我的代码以使尾部斜线有效?

谢谢!

2 个答案:

答案 0 :(得分:1)

要向您的扩展程序中添加一个尾部斜杠,请输入较少的html网址,您需要修改这两个规则。

在第一条规则中,我们在目标网址的末尾添加一个尾部,以便在所有.html请求中添加斜杠。

在第二个规则中,我们在正则表达式模式的末尾添加一个尾部斜杠,以接受带有斜杠的请求。

Options -Indexes
RewriteEngine On

# Redirect external .php requests to extension less url
RewriteCond %{THE_REQUEST} ^(.+)\.html([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.html$ http://%{HTTP_HOST}/foo/$1/ [R=301,L]

# Resolve .html file for extension less html urls
RewriteRule ^([^/.]+)/?$ $1.html [L]

在测试之前清除浏览器! (希望,这有帮助!)

答案 1 :(得分:1)

我修改了我的代码:

Options -Indexes
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)/$ $1.html

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.]+\.html(\?[^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.html$ http://%{HTTP_HOST}/fr/$1 [R=301,L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ http://%{HTTP_HOST}/fr/$1/ [R=301,L]

效果很好