使用 .htaccess 时如何使 mod_rewrite *not* 执行主目录扩展
Posted
技术标签:
【中文标题】使用 .htaccess 时如何使 mod_rewrite *not* 执行主目录扩展【英文标题】:How to make mod_rewrite *not* perform home directory expansion when using .htaccess 【发布时间】:2011-05-25 06:42:56 【问题描述】:文件路径:/Users/user_name/Sites/example.com
可浏览:http://localhost/~user_name/example.com/
在子目录 (chrome
) 中,我得到了这样的 .htaccess
:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^rgba\((\d1,3%?,\s?\d1,3%?,\s?\d1,3%?,\s?[0-1]?\.?\d+)\)$ rgba.php?rgba=$1 [PT]
这匹配如下请求:
http://localhost/~user_name/example.com/chrome/rgba(255,255,255,0.5)
并且应该将请求重写为:
http://localhost/~user_name/example.com/chrome/rgba.php?rgba=(255,255,255,0.5)
我把rgba.php放在chrome
目录下。我仍然收到此错误消息:
The requested URL /Users/user_name/Sites/example.com/chrome/rgba.php was not found on this server.
我阅读了手册中关于主目录扩展和 [PT] 标志的部分,但没有区别。
如果我建立一个指向example.com
目录的虚拟主机,它就可以工作。我希望它可以双向工作=P
那我该怎么做呢?
我在 Mac OS X 上运行 Apache/2.2.15 (Unix)
编辑
对于用户 Sites
目录,AllowOverride
设置为 All
。如果不是重写,那根本就不应该工作。
【问题讨论】:
我遇到了类似的问题。您碰巧找到解决此问题的方法吗? @SaurabhNanda 和 OP,检查我的答案。希望它可以帮助您,或者至少对其他人有所帮助。 投反对票 - 想解释一下你为什么选择投反对票? 【参考方案1】:我花了半天的时间为此绞尽脑汁,我能找到的唯一解决方案是创建一个新的 VirtualHost,并将 DocumentRoot 设置为用户的主目录。
【讨论】:
【参考方案2】:天哪,真是令人沮丧。但我有它的工作。
我尝试了很多东西。我认为 RewriteRule 上的 PT 标志会修复它,但不是。
我仍然不知道如何停止主目录扩展,但我想出了一个解决方法。在RewriteRule
之前,使用RewriteBase /~user_name/example.com/chrome/
。这会覆盖重写的前缀(我的配置中的日志条目):
<SNIP> (2) [perdir /Users/colin/Sites/ajaxtest/] trying to replace prefix /Users/colin/Sites/ajaxtest/ with /~colin/ajaxtest/
更新
这个解决方案有点工作,但它似乎使重写引擎触发两次......一次用于内部重定向,然后再次触发。我最终像其他提交者一样使用了 VirtualHost。
【讨论】:
【参考方案3】:允许在你的配置文件中覆盖你的主目录。
【讨论】:
这是一个错误的答案。允许覆盖也不能解决问题。以上是关于使用 .htaccess 时如何使 mod_rewrite *not* 执行主目录扩展的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 htaccess 使某些 javascript 文件从 php 呈现
如何使子目录中的 cakePHP 2.x 出现在根目录中(在 htaccess 中使用 mod_rewrite)? [关闭]