我有以下结构
/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也重定向了子目录,显然情况并非如此。有人能告诉我哪里错了吗?
答案 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的时间。