使用RewriteRule为index.php提供参数

使用RewriteRule为index.php提供参数,php,regex,.htaccess,mod-rewrite,Php,Regex,.htaccess,Mod Rewrite,我有一个重定向器,它将url后面/中的所有内容作为参数提供给隐藏的index.php(然后使用js的window.location将用户重定向到另一个域,主机不支持通过.htaccess进行外部重定向),但我丢失了代码。每个文件(index.php、.htaccess)都位于/storage文件夹中。 .htaccess是这样的,但我无法理解: RewriteRule ^(.*) /?$1 [R,L] 这是一个无限的重定向循环 它的工作原理是输入http://storage.mysite.co

我有一个重定向器,它将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,因为它重定向了以下内容:


*
表示“0或更多”。如果您只想在至少存在一个重定向的情况下重定向,那么您应该使用
+

听起来这正是您需要的:

RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^(.*)$ index.php
在PHP中,
$\u服务器['REQUEST\u URI']
仍将是原始请求的URI
/file.png

去掉R标志将修复循环。此外,如下文所述,无需将请求URI添加为GET参数。
R标志表示新地址
/?file.png
被发送到浏览器,然后浏览器对该URI发出新请求。
删除R标志意味着Apache在不通知浏览器的情况下提供新文件
index.php

这意味着尽管正在解析
index.php
,但请求URI仍然是
/file.png

RewriteCond%{REQUEST\u URI}^/index.php
表示如果请求是针对
/index.php
,则不会重写


我已经测试了这个,它是有效的。如果您有任何问题,请发表评论。

谢谢,尝试了这个,现在它不再循环,而是直接转到404,并且不做任何重定向。如果这是您想要的,我将htaccess文件中以前的规则完全替换为您的版本。至少giving
storage.mysite.com/?file.png
正确地转到index.php并执行重定向。因此请求
storage.mysite.com/file.png
会得到404?在.htaccess中是否有其他规则?.htaccess包含以下内容:
RewriteCond%{REQUEST\u URI}^/index.php RewriteRule^(+)$index.php ErrorDocument 404/404.php
我添加了404行,因此它不会被重定向到主机自己的404页面。听起来好像没有处理重写。如果是,404请求也将被重写,您将被重定向到
http://otherdomain.com/12345678/404.php
尝试在.htacces文件顶部添加
重写引擎。如果这不能解决问题,请创建一个phpinfo()文件,并在加载的模块部分中查找
mod_rewrite
。我在
上添加了
RewriteEngine,但它会破坏整个.htaccess文件,因为它会进入主机的404页面。如果我没记错的话,原始版本中没有一个
重写cond
,它是一行(除了
上的
重写引擎),而且它确实工作了,所以我不知道现在会出现什么问题,尽管我在这里发布问题之前一直在尝试通过反复尝试来修复它。