簡體   English   中英

Apache2,php5-fpm-不需要文件擴展名

[英]Apache2, php5-fpm - file extension not required

我已經使用PHP5-FPM(使用PHP 5.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
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L]

所以我想要的是除精確文件匹配項之外的所有內容都傳遞給index.php

但是,發生的是當我轉到/api/ ,正在加載api.php ,而不是將請求轉發到index.php

我仔細閱讀了文檔,對Google進行了徹底的搜索(除非我沒有使用正確的關鍵字),並檢查了apache和php的配置。 這在使用nginx和php5-fpm或apache和mod_php5的組合的實時服務器或開發服務器上不會發生

我的虛擬主機的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>

編輯我已經進一步調查:

  • 如果我刪除api.php-重寫有效
  • 如果我刪除RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-f重寫有效
  • 他們加載沒有擴展名的任何.php文件-並非非PHP文件僅適用於擴展名。

嘗試更換:

Options FollowSymLinks MultiViews ExecCGI

通過:

Options FollowSymLinks -MultiViews ExecCGI

MultiViews關鍵字來自mod_negociation ,可能會有很多副作用。 這些影響之一是,它可以掃描已知的擴展名,當您請求“ api”時,它可以掃描api.php'或'api.html'文件,並在內部重定向對這些文件的請求。

來自http://httpd.apache.org/docs/2.2/content-negotiation.html#multiviews

MultiViews的作用如下:如果服務器收到對/ some / dir / foo的請求,如果/ some / dir啟用了MultiViews,並且/ some / dir / foo不存在,則服務器將讀取目錄以查找名為foo。*的文件,並有效地偽造了一個類型圖,該類型圖對所有這些文件進行了命名,為它們分配了與客戶端要求通過名稱提供的相同的媒體類型和內容編碼。 然后,它選擇最符合客戶要求的匹配項。

對我來說,這似乎是個大漏洞,有人認為這是一個功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM