通过附加 .html 后缀重写 URL
Rewriting URL by appending .html suffix
我正在尝试将 mod_rewrite 与 Apache 2.4 一起使用以附加后缀 .html
来请求 URI。
应该重写的 URI 非常简单,采用以下形式:
http://host.domain/page/
以上需要改写为http://host.domain/page.html
。唯一的限制是重写逻辑必须忽略引用实际文件或目录的 URI。
到目前为止,如果 没有尾部斜杠 ,我想出的重写代码片段工作正常,但是如果存在斜杠,Apache 会发出 404 和以下错误消息:
The requested URL /redirect:/about.html was not found on this server.
(当 URI 为 http://localhost/about/
时会发生上述情况)
有人可以帮我调试吗?为什么 Apache 在前面加上 /redirect:
?
这是重现症状的一个非常简单的片段:
RewriteEngine on
RewriteBase /
RewriteRule ^(.+[^/])/$ / [C]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^$
RewriteRule (.*) /.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 ^(.+?)/$ / [L,R=301]
# make sure corresponding html file exists
RewriteCond %{DOCUMENT_ROOT}/\.html -f
RewriteRule ^(.+?)/?$ .html [L]
我正在尝试将 mod_rewrite 与 Apache 2.4 一起使用以附加后缀 .html
来请求 URI。
应该重写的 URI 非常简单,采用以下形式:
http://host.domain/page/
以上需要改写为http://host.domain/page.html
。唯一的限制是重写逻辑必须忽略引用实际文件或目录的 URI。
到目前为止,如果 没有尾部斜杠 ,我想出的重写代码片段工作正常,但是如果存在斜杠,Apache 会发出 404 和以下错误消息:
The requested URL /redirect:/about.html was not found on this server.
(当 URI 为 http://localhost/about/
时会发生上述情况)
有人可以帮我调试吗?为什么 Apache 在前面加上 /redirect:
?
这是重现症状的一个非常简单的片段:
RewriteEngine on
RewriteBase /
RewriteRule ^(.+[^/])/$ / [C]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^$
RewriteRule (.*) /.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 ^(.+?)/$ / [L,R=301]
# make sure corresponding html file exists
RewriteCond %{DOCUMENT_ROOT}/\.html -f
RewriteRule ^(.+?)/?$ .html [L]