apache别名和子目录

时间:2012-11-29 23:20:52

标签: apache alias subdirectory

我有以下结构

/var/www/mysite/public/
/var/www/mysite/api/

在两个目录中,.htaccess都设置为重写URL,如下所示:

dev.domain.com/example/ => dev.domain.com/index.php?token=example

dev.domain.com/api/example => dev.domain.com/index.php?token=example

我的apache conf看起来像这样

...
<VirtualHost *:80>
   Servername dev.domain.com
   DocumentRoot /var/www/mysite/public/
   Alias /api/ "/var/www/mysite/api/"
   <Directory "/var/www/mysite/api/">
       Options Indexes FollowSymLinks
   </Directory>
</VirtualHost>
...

dev.domain.com/api / 工作正常(它调用www / api / index.php),但 dev.domain.com/api/example / 调用公共站点(www / public / index.php,查询字符串为token = example)。

我认为apache指令Alias也重定向了子目录,显然情况并非如此。有人能告诉我哪里错了吗?

2 个答案:

答案 0 :(得分:3)

对于mysite / api /你应该使用绝对路径,请尝试这些重写:

RewriteRule ^api/(.*)/(.*)/$ /api/index.php?object=$1&collection=$2 [QSA,L] 

RewriteRule ^api/(.*)/$ /api/index.php?object=$1 [QSA,L]

如果任何内容无法正常工作,请记住您可以调试重写过程以启用重写

RewriteLog "/var/apache/logs/rewrite.log"
RewriteLogLevel 7 

请注意仅在开发环境中使用rewritelog配置,因为这会大大降低服务器的速度。

答案 1 :(得分:3)

所以这是一个重写问题:别名目录不应该在匹配的模式中。

这是最终配置: apache配置文件

...
<VirtualHost *:80>
        ServerName dev.domain.com
        DocumentRoot /var/www/mysite/public/

        Alias /api/ /var/www/mysite/api/
        <Directory /var/www/mysite/api/>
             Options FollowSymLinks -Indexes   
             AllowOverride all
        </Directory>
</VirtualHost>
...

和.htacess文件/ api /目录

Options FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301]

RewriteRule ^(.*)/(.*)/$ /api/index.php?object=$1&collection=$2 [QSA,L] 
RewriteRule ^(.*)/$ /api/index.php?object=$1 [QSA,L]

感谢@freedev的时间。