2010-03-29 38 views
1

我使用国防部重写目标不存在的文件/目录的所有请求重定向到index.php?url=*PHP:用于链接在mod_rewrite的应用打破

这肯定是你的mod_rewrite做但我最平常的事情最好的解决办法有一个问题:

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

问题1:

  • 使用基本标记的最佳解决方案?不过,我发现没有任何PHP框架使用基本标签。

  • 我目前有一个正则表达式替换所有相关链接,指向输出前的正确路径。可以吗”?

问题2:

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

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

附加信息:当没有mod_rewrite的上述要求是这样的:mydomain.com/public/index.php/blog/view/1

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

编辑/其他问题:

有没有办法使用普通htaccess的代码,以使/公/基目录?

回答

2

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

1

我完全不理解这些问题。 是的,这肯定是你的mod_rewrite做最普通的事情, 2尚未条件:

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

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

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

+0

我觉得你根本不理解这个问题。 – psil 2010-03-29 14:36:49

+1

@psil我觉得挺相反的。你从无处设计你的问题。你通常采用不寻常的方式。为什么不使用简单而简单的解决方案? – 2010-03-29 14:39:11

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更适合你,你可以做支持功能,可以找到两者。