Apache 通过附加.html后缀重写URL

Apache 通过附加.html后缀重写URL,apache,.htaccess,mod-rewrite,apache2.4,Apache,.htaccess,Mod Rewrite,Apache2.4,我正在尝试使用Apache 2.4的mod_rewrite来附加后缀.html来请求URI 应该重写的URI非常简单,其形式如下: http://host.domain/page/ 以上内容需要重写为http://host.domain/page.html。唯一的限制是重写逻辑必须忽略引用实际文件或目录的URI 到目前为止,如果没有尾随斜杠,我提出的重写代码段可以正常工作,但是如果存在尾随斜杠,Apache会发出404和以下错误消息: 在此服务器上找不到请求的URL/redirect:/abou

我正在尝试使用Apache 2.4的mod_rewrite来附加后缀
.html
来请求URI

应该重写的URI非常简单,其形式如下:

http://host.domain/page/

以上内容需要重写为
http://host.domain/page.html
。唯一的限制是重写逻辑必须忽略引用实际文件或目录的URI

到目前为止,如果没有尾随斜杠,我提出的重写代码段可以正常工作,但是如果存在尾随斜杠,Apache会发出404和以下错误消息:

在此服务器上找不到请求的URL/redirect:/about.html。

(当URI为
http://localhost/about/

有人能帮我调试一下吗?为什么Apache会预编
/redirect:

下面是一个非常简单的片段,它再现了这些症状:

RewriteEngine on

RewriteBase /

RewriteRule ^(.+[^/])/$ /$1 [C]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^$
RewriteRule (.*) /$1.html [L,R=301] # Tried without R=301 too

# This doesn't work either.
# RewriteRule ^about/$ /about.html [L,R=301]
您可以使用:

RewriteEngine on
RewriteBase /

# strip trailing slash from non-directoies
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ /$1 [L,R=301]

# make sure corresponding html file exists
RewriteCond %{DOCUMENT_ROOT}/$1\.html -f
RewriteRule ^(.+?)/?$ $1.html [L]

你能解释一下我在上面哪里出错了吗?例如,为什么不链接第一条规则来删除尾部斜杠呢?在第一条规则中不需要使用
C
标志,最好使用
RewriteCond%{DOCUMENT\u ROOT}/$1\.html-f
来确保相应的html文件存在。