【发布时间】:2016-03-02 20:22:07
【问题描述】:
我正在托管一个只有一堆静态 .html 文件的网站。我不想在 URL 中包含 .html 文件扩展名,所以我添加了重写规则:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.+)$ /$1.html [L]
这很简单并且工作正常,但我现在也希望将以 .html 结尾的 (302) URL 重定向到规范路径,即没有文件扩展名。我尝试了以下方法:
RewriteCond %{REQUEST_FILENAME} \.html$
RewriteRule ^(.+)\.html$ /$1 [L,R]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.+)$ /$1.html [L]
但是,这会导致无休止的重定向循环。我怀疑这是因为第二条规则,内部重写,仍然触发了第一条规则,外部重定向。
我还能如何做到这一点?我查看了所有的重写标志并尝试了一堆听起来很有希望的东西,但我还没有设法完成这项工作。我怎样才能既从foo.html重写为foo,又从foo内部重写为foo.html?
【问题讨论】:
标签: apache mod-rewrite url-rewriting url-redirection friendly-url