apache 别名和子目录

Jea*_*moy 4 apache alias subdirectory

我有以下结构

/var/www/mysite/public/
/var/www/mysite/api/
Run Code Online (Sandbox Code Playgroud)

在这两个目录中,.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

我的 apacheconf 看起来像这样

...
<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>
...
Run Code Online (Sandbox Code Playgroud)

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

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

Jea*_*moy 5

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

这是最终的配置: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>
...
Run Code Online (Sandbox Code Playgroud)

和 .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]
Run Code Online (Sandbox Code Playgroud)

感谢@freedev 抽出时间。