2017-06-22 58 views
0

我有以下.htaccess的RewriteCond得到滿足在測試,但在實踐中沒有

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [C] 

RewriteCond %{REQUEST_FILENAME} ^(.*).php$ 
RewriteRule ^(.*)$ /index.php [NC,L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

我想這首先重新路由一切HTTPS。

然後我想檢查用戶是否正在訪問一個PHP文件,如domain.com/pages/page/a.php並將其路由到/index.php

然後最後我想要的一切,不是那一個文件或目錄路由至index.phpdomain.com/my-fun-page

我認爲第一個和最後一個塊是正確的,但由於某些原因,當我在htaccess tester運行測試成功運作。但是,當我在我自己的服務器上運行它時,它仍然允許我訪問domain.com/pages/page/a.php

我怎樣才能找出原因,或者我做錯了什麼?

回答

0

嘗試用下面的PHP的一部分,

RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule^/index.php [NC,L,QSA] 
0

您可以將第2第3規則組合成一個單一的規則是這樣的:

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,LE] 

RewriteCond %{REQUEST_FILENAME}\.php -f [OR] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

即使RewriteCond %{REQUEST_FILENAME}\.php -f [OR]可能沒有必要爲!-f!-d將已經涵蓋這種情況。

相關問題