Apache:我如何将foo.html重定向到foo并将foo重写为foo.html?

时间:2015-11-28 23:20:10

标签: apache mod-rewrite url-rewriting url-redirection friendly-url

我正在托管一个只是一堆静态.html文件的网站。我不希望在网址中包含.html文件扩展名,因此我添加了重写规则:

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

这很简单且工作正常,但我现在喜欢将以.html结尾的网址重定向(302)到规范路径,即没有文件扩展名。我尝试了以下内容:

  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并仍然从foofoo.html进行内部重写?

1 个答案:

答案 0 :(得分:2)

several questions询问此程序的工作原理。使用2变量:

THE_REQUEST