使用RewriteRule为index.php提供参数

时间:2013-06-28 16:32:50

标签: php regex .htaccess mod-rewrite

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

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

2 个答案:

答案 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或更多”。如果您只想重定向,如果至少有一个,那么您应该使用+代替。