2016-10-01 72 views
0

我已添加.htaccess調整以拒絕對.php文件的所有請求,並在內部將所有非.php請求重定向到.php文件。.htaccess拒絕.php擴展但無法觸發AJAX請求

一切工作正常在我的本地,但在生產環境中的文件上傳腳本失敗(我發現,文件上傳腳本使用JS/Ajax調用PHP文件,這是不加載)

我的.htaccess配置爲:

RewriteEngine on 

# Rewrite /foo/bar to /foo/bar.php 
RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L] 

# Return 404 if original request is /foo/bar.php 
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$" 
RewriteRule .* - [L,R=404] 

和JS調用:

<form class="dropzone" id="dropzoneForm" action="ads_upload" 
         enctype="multipart/form-data" method="post"> 
         <div class="fallback"> 
          <input name="file" type="file" multiple /> 
         </div> 
        </form> 

...............

$.post("ads_upldDelete?fname=" + file.name);//up-deletefile.php 

ads_upload.php和ads_upldDelete.php都存在於服務器中,但由於模式重寫規則無法達到,我可以在模式重寫時寫入和異常允許嗎?

回答

0

您可以使用:

RewriteEngine on 

# Rewrite /foo/bar to /foo/bar.php 
RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L] 

# Return 404 if original request is /foo/bar.php 
RewriteCond %{REQUEST_URI} !ads_up(?:load|ldDelete)\.php$ [NC] 
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$" 
RewriteRule .* - [L,R=404] 

並使用ads_upload.phpads_upldDelete.php的鏈接。

+0

如果兩個不同的名稱像ads_upload.php和ads_tryagain.php會怎樣?我可以寫:RewriteCond%{REQUEST_URI}!(ads_upload.php | ads_tryagain.php)$ [NC]? –

+0

是的,你可以!與2'(?:x | y | z | ...)'相同 – Croises