.htaccess - 强制 url 来自 'dir/page.html' → 'dir/page'

.htaccess - Force urls from 'dir/page.html' → 'dir/page'

我想删除特定文件类型的所有尾随扩展名(例如删除所有 .html 并让其他一切保持原样)

因此,例如,如果用户访问页面 <my-site>/how-to/use-git.html,他将被重定向到 <my-site>/how-to/use-git(有或没有尾随 /)。任何其他请求(如 <my-site>/how-to/img1.jpg)将保持原样(<my-site>/how-to/img1.jpg)。

四处浏览,我找不到满足以下条件(两者)的内容:

我试过这样的事情

# From 
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} \s/+pages/(.+?)\.html[\s?] [NC]
RewriteRule ^ /%1/ [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/pages/\.html -f [NC]
RewriteRule ^(.+?)/?$ pages/.html [L]

但不强制页面转到没有扩展名的版本。

添加

# From http://www.webweaver.nu/html-tips/web-redirection.shtml
RedirectMatch 301 (.*)\.html$ 

创建 404 未找到错误。

您可以在 DOCUMENT_ROOT/.htaccess 文件中使用这些规则:

RewriteEngine On

# To externally redirect /path/file.html to /path/file
RewriteCond %{THE_REQUEST} /(.+?)\.html[\s?] [NC]
RewriteRule ^ /%1 [L,R=302]

## To internally redirect /path/file to /path/file.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+?)/?$ .html [L]