Apache2,php5 fpm-不需要文件扩展名
我已经使用PHP5-FPM(使用PHP5.3.27)和apache2设置了一个服务器 文档根目录中有一个Apache2,php5 fpm-不需要文件扩展名,apache,.htaccess,mod-rewrite,php,travis-ci,Apache,.htaccess,Mod Rewrite,Php,Travis Ci,我已经使用PHP5-FPM(使用PHP5.3.27)和apache2设置了一个服务器 文档根目录中有一个api.php文件,使用mod_rewrite,我在.htaccess中得到了这个规则: RewriteEngine on RewriteRule ^api/rest api.php?type=rest [QSA,L] RewriteCond %{REQUEST_URI} !^/(media|skin|js)/ RewriteCond %{REQUEST_FILENAME} !-f Rewri
api.php
文件,使用mod_rewrite,我在.htaccess中得到了这个规则:
RewriteEngine on
RewriteRule ^api/rest api.php?type=rest [QSA,L]
RewriteCond %{REQUEST_URI} !^/(media|skin|js)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L]
所以我想要的是,除了精确的文件匹配之外,其他所有内容都要传递到index.php
然而,当我转到/api/
时,正在加载api.php
,而不是将请求转发到index.php
我已经阅读了文档,在谷歌上搜索了一遍(除非我没有使用正确的关键字),并查看了apache和php配置。这不会发生在我们的实时服务器或使用nginx和php5 fpm或apache和mod_php5组合的开发服务器上
vhost的Apache配置为:
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName admin.localhost
ServerAlias *.localhost
<Directory "/var/www/html">
Options FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order deny,allow
Allow from all
</Directory>
# Wire up Apache to use Travis CI's php-fpm.
<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
</IfModule>
</VirtualHost>
DocumentRoot/var/www/html
ServerName admin.localhost
ServerAlias*.localhost
选项如下SYMLINKS多视图执行CGI
允许超越所有
命令拒绝,允许
通融
#连接Apache以使用Travis CI的php fpm。
AddHandler php5 fcgi.php
行动php5 fcgi/php5 fcgi
别名/php5 fcgi/usr/lib/cgi-bin/php5 fcgi
FastCgiExternalServer/usr/lib/cgi-bin/php5-fcgi-host 127.0.0.1:9000-pass-header-Authorization
编辑
我进一步调查了:
- 如果我删除api.php,重写就可以了
- 如果我删除
-重写工作正常RewriteCond%{REQUEST\u FILENAME}-f
- 任何
文件在没有扩展名的情况下加载-非php文件只能使用扩展名.php
Options FollowSymLinks MultiViews ExecCGI
作者:
MultiViews关键字来自mod_negocation,可能有很多副作用。其中一个效果是,它可以扫描已知的扩展名,当您请求“api”时,它可以扫描“api.php”或“api.html”文件,并在内部重定向这些文件上的请求
发件人:
多视图的效果如下:如果服务器收到
如果/some/dir启用了多视图,则请求/some/dir/foo,以及
/某些/dir/foo不存在,则服务器读取该目录
查找名为foo.*的文件,实际上伪造了一个类型映射
为所有这些文件命名,为它们分配相同的媒体类型和
如果客户要求其中一个
他们的名字。然后,它选择与客户的最佳匹配
要求
对我来说,这似乎是一个大洞,有人认为这是一个特点
Options FollowSymLinks -MultiViews ExecCGI