2017-07-17 117 views
1

我有我的網站上,這是應該重定向到https以下htaccess的://和重寫URL是這樣的:.htaccess文件返回404子

http://company.com/product.php 

變爲這樣:

https://company.com/product/ 

下面是當前的代碼:

ErrorDocument 404 /404.php 
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/$ $1.php 
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ /$1/ [R=301,L] 
RewriteRule ^updates/.*\.(zip)$ - [F,L,NC] 

的問題是,當我試圖訪問一個子文件夾,例如:

https://company.com/subfolder/ 

它返回404,我猜是因爲它正在尋找一個subfolder.php文件?

,當我進入像這樣我可以打開子文件夾的index.php文件:

https://company.com/subfolder/index.php 

我可以改變這個代碼保存當前的功能,還允許訪問子文件夾?

回答

1

你需要爲這些規則的「不是一個目錄」條件:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/$ $1.php 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php 

RewriteCond僅適用於下一RewriteRule所以你要重複它。

+0

謝謝,成功了! –

+0

沒問題。樂意效勞! – colburton

+0

它會對'/ invalid-file.php'做一個額外的無用重寫,而不是直接渲染'/ 404.php'。 – anubhava

0

只有在檢查是否存在對應的.php文件而不是爲每個缺失的文件添加.php之後,規則才應該添加.php

有這樣的:

ErrorDocument 404 /404.php 
RewriteEngine On 

RewriteRule ^updates/.*\.zip$ - [F,L,NC] 

RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ /$1/ [R=301,NE,L] 

RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 

RewriteCond %{DOCUMENT_ROOT}/$1/$2.php -f 
RewriteRule ^([^/]+)/(.+?)/?$ /$1/$2.php [L]