在apache 2.4中使用重写规则循环

时间:2014-05-08 18:44:28

标签: apache .htaccess mod-rewrite redirect

使用我的apache 2.4我想要以下内容:

  • GET /file.html - > 301重定向到路径/~
  • GET /~ - >返回文件/file.html
  • 的内容

在我.htaccess我有以下内容:

RewriteEngine on
RewriteBase /

RewriteRule ^file.html ~ [R=301,L]
RewriteRule ^~ file.html [L]

但现在GET /~还会将301重定向返回到/~。这个bug在哪里?我想,对于GET /~,第一条规则未应用,第二条规则将返回文件file.html的内容。这是我想要的mod_rewrite吗?

1 个答案:

答案 0 :(得分:1)

您的规则问题在于它会导致无限循环,因为这两个规则都是这样重写的:A->BB->A

您可以使用此规则来避免循环:

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} \s/+file\.html\s [NC]
RewriteRule ^ ~ [R=302,L,NE]

RewriteRule ^~$ file.html [L,B]

THE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行一些重写规则后不会被覆盖。