PHP:mod_rewrite app中链接破解的最佳解决方案

时间:2010-03-29 14:21:18

标签: php apache design-patterns mod-rewrite

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

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

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

问题1:

  • 使用基本标签是最佳解决方案吗?我看到没有一个PHP框架使用基本标记。

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

问题2:

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

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

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

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

编辑/补充问题:

有没有办法使用普通的htaccess代码制作/ public / base dir?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

所以,没有什么伤害你现有的图像。

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

答案 2 :(得分:0)

路径信息怎么样?您可以在没有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更适合你,你可以制作支持函数,也可以同时查找。