我有一个重定向器,它将url之后的所有内容都作为参数提供给隐藏的index.php(然后用js将window.location重定向到另一个域,主机不支持外部重定向通过.htaccess),但我丢失了代码。每个文件(index.php,.htaccess)都在/ storage文件夹中 .htaccess是这样的,但我无法弄清楚:
RewriteRule ^(.*) /?$1 [R,L]
这个正在进行无限循环的重定向。
当输入http://storage.mysite.com/file.png
时,它会打开http://storage.mysite.com/?file.png
我试图避免在.htaccess中直接调用index.php,因为它重定向了这个:
<?php
echo "
<script>
window.location='http://otherdomain.com/12345678".$_SERVER['REQUEST_URI']."'
</script>
"; // note there's no slash after the number, the REQUEST_URI had it
?>
这样做的正确方法是什么?
答案 0 :(得分:1)
听起来这就是你所需要的:
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^(.*)$ index.php
在PHP中,$_SERVER['REQUEST_URI']
仍然是原始请求的URI /file.png
。
摆脱R标志将解决循环问题。另外,不需要将请求URI添加为GET参数,如下所述
R标志表示新地址/?file.png
被发送到浏览器,然后浏览器对该URI发出新请求。
删除R标志意味着Apache在不告知浏览器的情况下提供新文件index.php
。
这意味着虽然正在解析index.php
,但请求URI仍为/file.png
。
RewriteCond %{REQUEST_URI} !^/index.php
表示请求是针对/index.php
的,则不会重写。
我测试了这个并且它有效。如果您有任何问题,请发表评论。
答案 1 :(得分:0)
*
表示“0或更多”。如果您只想重定向,如果至少有一个,那么您应该使用+
代替。