.htaccess 如果url不包含扩展名,则自动追加扩展名

.htaccess 如果url不包含扩展名,则自动追加扩展名,.htaccess,mod-rewrite,url-rewriting,isapi-rewrite,.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] 但在某些情况下,URL不包含扩展名 像用户应该能够输入/xyz.html或/xyz一样,我需要的是,如果用户没

我使用以下重写规则

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]
但在某些情况下,URL不包含扩展名

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

差不多

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

我想出了这个,它将捕获文件名,如果有扩展名,它也将捕获它。文件名捕获组随后附加了
.html
。但是,我没有在其中测试多个
/
,但我相信您可以根据需要进行调整


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

我将这两种情况分开如下:

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]