.htaccess 删除 .html 并强制重定向到无扩展名的 url

use*_*890 2 apache .htaccess mod-rewrite redirect url-rewriting

我正在尝试.html从 URL 中删除扩展名,并将 302 重定向到无扩展名 URL,如下所示:

http://example.com/file.html -> http://example.com/file

我看过很多 stackoverflow 答案,尝试过但不幸的是没有成功。我提出了这个,但我不明白为什么它不起作用:

RewriteEngine On

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

RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteRule ^(.*)$ $1.html
Run Code Online (Sandbox Code Playgroud)

第一个块应重定向到无扩展版本,第二个块应找到该文件。

sta*_*een 5

您需要在此处使用 %{THE_REQUEST} 来防止重写循环错误。否则,如果没有 THE_REQUEST 变量,规则将继续重写 file => file.html=>file=>file.html..

RewriteEngine On

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

RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
Run Code Online (Sandbox Code Playgroud)