0

我有一个重定向器,它将 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
?>

这样做的正确方法是什么?

4

2 回答 2

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表示如果请求是 for /index.php,那么它不会被重写。

我已经对此进行了测试,并且可以正常工作。如果您有任何问题,请发表评论。

于 2013-06-28T16:55:08.430 回答
0

*意思是“0个或更多”。如果您只想在至少有一个时重定向,那么您应该使用+

于 2013-06-28T16:34:58.683 回答