如何使用.htaccess使mod_rewrite *不*执行主目录扩展

时间:2010-12-14 13:09:12

标签: .htaccess mod-rewrite apache2 vhosts

文件路径:/Users/user_name/Sites/example.com

浏览:http://localhost/~user_name/example.com/

在子目录(chrome)中,我得到了.htaccess,如下所示:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^rgba\((\d{1,3}%?,\s?\d{1,3}%?,\s?\d{1,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)

修改 用户AllowOverride目录的All设置为Sites。如果不是重写就不应该有效。

3 个答案:

答案 0 :(得分:1)

我花了半天时间绞尽脑汁,我能找到的唯一解决方案就是创建一个新的VirtualHost,并将DocumentRoot设置为用户的主目录。

答案 1 :(得分:1)

圣洁的上帝令人沮丧。但是我有它的工作。

我尝试了很多东西。我认为 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。

答案 2 :(得分:-1)

允许在您的主目录的配置文件中覆盖。