使用我的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
吗?
答案 0 :(得分:1)
您的规则问题在于它会导致无限循环,因为这两个规则都是这样重写的:A->B
和B->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从您的浏览器收到的原始请求,并且在执行一些重写规则后不会被覆盖。