.htaccess文件返回404子
问题描述:
我有我的网站上,这是应该重定向到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
我可以改变这个代码保存当前的功能,还允许访问子文件夹?
答
你需要为这些规则的“不是一个目录”条件:
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
所以你要重复它。
答
只有在检查是否存在对应的.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]
谢谢,成功了! –
没问题。乐意效劳! – colburton
它会对'/ invalid-file.php'做一个额外的无用重写,而不是直接渲染'/ 404.php'。 – anubhava