【问题标题】:Giving parameters to index.php with RewriteRule使用 RewriteRule 为 index.php 提供参数
【发布时间】:2013-06-28 16:32:50
【问题描述】:

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

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

【问题讨论】:

    标签: php regex .htaccess mod-rewrite


    【解决方案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,则不重写。

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

    【讨论】:

    • 谢谢,试过了,现在不是循环,而是直接进入 404 并且不做任何重定向。如果那是您的意图,我将 htaccess 文件中的先前规则完全替换为您的版本。至少给 storage.mysite.com/?file.png 正确地转到 index.php 并进行重定向。
    • 所以请求 storage.mysite.com/file.png 会得到 404? .htaccess 中还有其他规则吗?
    • .htaccess 包含这个:RewriteCond %{REQUEST_URI} !^/index.php RewriteRule ^(.+)$ index.php ErrorDocument 404 /404.php 我已经添加了 404 行,所以它不会被重定向到主机自己的 404 页面。
    • 听起来重写没有被处理。如果是,那么 404 请求也将被重写,您将被重定向到 http://otherdomain.com/12345678/404.php 尝试在 .htacces 文件的顶部添加 RewriteEngine On。如果这不能解决问题,请创建一个 phpinfo() 文件并在 Loaded Modules 部分中查找 mod_rewrite
    • 我添加了RewriteEngine On,但它会破坏整个 .htaccess 文件,因为它会进入主机的 404 页面。如果我没记错的话,原始版本中没有RewriteCond,它是一行(除了RewriteEngine On)并且它确实有效,所以我不知道现在可能是什么问题,甚至尽管在将问题发布到此处之前,我一直在尝试通过反复试验来解决它。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2019-10-31
      相关资源
      最近更新 更多