Apache重写规则redux

时间:2009-04-26 10:35:01

标签: apache rest rewrite

我有一个REST框架,当它填入任何目录时应该是Just Work(TM),当我在子目录中有项目时似乎工作正常,但如果它在root中则不行。所以,给出一些示例目录;

/
/project1
/bingo/project2
/hoopla/doopla/minor/project3

所有这些都可以正常工作,但是当项目在根目录中运行时我会得到“funnies”*(我想,有点难以解释,但是第二级重写不能正常工作)。这是我对通用.htaccess文件的尝试:

RewriteEngine On
RewriteRule ^static/ - [L]
RewriteCond %{REQUEST_URI} ^$
RewriteRule .* ./ [R,L]
RewriteRule ^index.php - [L]
RewriteRule (.*) index.php?q=$1 [QSA,PT]

(是的,所有项目都有一个子目录./static被重写忽略)我想要实现的是一组适用于大多数情况的重写规则(同样,在一个项目中使用webserver服务的目录)。我不是一个重写规则,我会很感激(并且是的,我已经阅读了太多的介绍性文章。我需要一些严肃的果汁。)

  • 有关这些好玩的更多信息;我的网络服务器在一个地方(在/ usr / share / apache2 / default-site /下)有一个docroot,但是一组规则表明/ projects是从其他不是docroot子目录的地方引入的(/ home / user /项目/)。当我去那里时,我得到一个/ projects子目录列表,如果其中一个子目录被调用(restmapp)与建议的重写规则,我得到;

    在此服务器上找不到请求的网址/home/user/Projects/restmapp/index.php。

1 个答案:

答案 0 :(得分:0)

请尝试以下规则:

RewriteRule ^static/ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php?q=$0 [L,QSA]

修改此外,您可以使用R标志强制进行外部重定向或激活logging feature of mod_rewrite以查看请求如何在内部重写/重定向。