如果url不包含,则自动附加扩展名

时间:2014-11-05 09:17:48

标签: .htaccess mod-rewrite url-rewriting isapi-rewrite

我正在使用以下重写规则

RewriteMap map txt:C:/seo/mapping.txt
RewriteCond %{QUERY_STRING} (?!admin)
RewriteCond ${map:$1|NOT_FOUND} !NOT_FOUND
RewriteRule ^(.*?\.(?:html|gif|jpg|png)) ${map:$1} [NC,L,NS,QSA]

但在某些情况下,网址不包含扩展程序

用户应该能够输入/xyz.html/xyz我需要的是,如果用户没有输入扩展名,那么在重写规则中.html应自动附加。

这样的东西
RewriteRule ^(.*?\.(?:html|gif|jpg|png)) ${map:$1\.html} [NC,L,NS,QSA]

2 个答案:

答案 0 :(得分:1)

我会将这两种情况分开:

RewriteMap map txt:C:/seo/mapping.txt
RewriteCond %{QUERY_STRING} (?!admin)
RewriteCond ${map:$1|NOT_FOUND} !NOT_FOUND
RewriteRule ^(.*?\.(?:html|gif|jpg|png)) ${map:$1} [NC,L,NS,QSA]

RewriteCond %{QUERY_STRING} (?!admin)
RewriteCond ${map:$1.html|NOT_FOUND} !NOT_FOUND
RewriteRule ^([^/.]+)$ ${map:$1.html} [NC,L,NS,QSA]

答案 1 :(得分:0)

我想出了这个,它将捕获文件名,如果有扩展名,它也会捕获它。然后,文件名捕获组附加.html。但是我没有用多个/来测试它,但我确信你可以根据需要调整它。

Example on Regexr

RewriteRule ^\/(\w+)[.]?(\w)? $1.html [NC,L,NS,QSA]