【问题标题】:PHP: Best solution for links breaking in a mod_rewrite appPHP:在 mod_rewrite 应用程序中链接中断的最佳解决方案
【发布时间】:2010-03-29 14:21:18
【问题描述】:

我正在使用 mod rewrite 将所有针对不存在的文件/目录的请求重定向到 index.php?url=*

这肯定是你用 mod_rewrite 做的最常见的事情,但我有一个问题:

当然,如果页面 url 是“mydomain.com/blog/view/1”,浏览器将在“虚拟”目录“mydomain.com/blog/view/”中查找图像、样式表和相关链接。

问题 1:

  • 使用基本标签是最好的解决方案吗?不过,我发现没有一个 PHP 框架使用 base 标记。

  • 我目前正在使用正则表达式替换所有相对链接以在输出之前指向正确的路径。这“好吗”?

问题 2:

服务器可能不支持 mod_rewrite。但是,所有公共文件,如图像、样式表和请求收集器 index.php 都位于目录 /myapp/public 中。通常 mod_rewrite 将所有请求指向/public,因此看起来好像 public 实际上是所有用户的根目录。

但是,如果没有 mod_rewrite,我必须使用 header() 调用从根目录将用户指向 /public。这意味着,然而,所有链接都会再次断开,因为突然所有图像等都必须通过/public/myimage.jpg调用

附加信息:当没有 mod_rewrite 时,上述请求将如下所示:mydomain.com/public/index.php/blog/view/1

  • 这两个问题的最佳解决方案是什么?

编辑/附加问题:

有没有办法使用纯 htaccess 代码制作 /public/ 基本目录?

【问题讨论】:

    标签: php apache design-patterns mod-rewrite


    【解决方案1】:

    以不需要 mod_rewrite 的方式编写应用程序(以拥有“丑陋”的网址为代价)。使用 mod_rewrite 逐步增强它以达到所需的结果。这可能意味着您需要在应用中存储一些基本路径配置信息。

    【讨论】:

      【解决方案2】:

      我根本不明白这些问题。 是的,这肯定是你用 mod_rewrite 做的最常见的事情,然而有两个条件:

      RewriteCond  %{REQUEST_FILENAME} !-f
      RewriteCond  %{REQUEST_FILENAME} !-d
      

      所以,没有什么会损害您现有的图像。

      为什么不只使用绝对路径,例如/myapp/public/myimage.jpg,那么,没有虚拟目录会伤害图片路径吗?

      【讨论】:

      • 我认为你根本不明白这个问题。
      • @psil 我认为完全相反。你设计你的问题无处不在。你以不寻常的方式做着平常的事情。为什么不使用简单明了的解决方案?
      【解决方案3】:

      路径信息呢?你可以在没有 mod_rewrite 的情况下使用它

      /index.php/path/to/another/file.jpg

      <?php
      echo $_SERVER["PATH_INFO"]; // outputs /path/to/another/file.jpg
      ?>
      

      无论如何,如果您想知道您的服务器是否支持 mod_rewrite:

      <?php
      echo "mod_rewrite : ".(!empty($_SERVER["REDIRECT_URL"])?"supported":"not supported");
      ?>
      

      然后你会知道 mod_rewrite 是解决方案还是 path_info 更适合你,你可以制作可以同时寻找两者的支持函数。

      【讨论】:

        猜你喜欢
        • 2011-04-12
        • 2011-11-21
        • 1970-01-01
        • 1970-01-01
        • 2014-09-23
        • 1970-01-01
        • 2019-05-08
        • 2017-10-03
        • 1970-01-01
        相关资源
        最近更新 更多