.htaccess 如何使自定义403页面和url重写的设置共存?

.htaccess 如何使自定义403页面和url重写的设置共存?,.htaccess,url-rewriting,http-status-code-404,http-status-code-403,.htaccess,Url Rewriting,Http Status Code 404,Http Status Code 403,在.htaccess文件中,我有重写URL的设置,例如http://www.myownwebsite.com/about.php至http://www.myownwebsite.com/about/ 我还有自定义错误403和404页面的设置 我遇到的问题是,例如,当我测试直接访问文件夹时,http://www.myownwebsite.com/css/,我看到的不是自定义403页面,而是自定义404页面。我猜这是因为url重写的设置覆盖了自定义403页面的设置 以下是my.htaccess文件中

在.htaccess文件中,我有重写URL的设置,例如
http://www.myownwebsite.com/about.php
http://www.myownwebsite.com/about/

我还有自定义错误403和404页面的设置

我遇到的问题是,例如,当我测试直接访问文件夹时,
http://www.myownwebsite.com/css/
,我看到的不是自定义403页面,而是自定义404页面。我猜这是因为url重写的设置覆盖了自定义403页面的设置

以下是my.htaccess文件中的相关代码:

ErrorDocument 403 /403.php
ErrorDocument 404 /404.php

RewriteEngine On
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]

我做错了什么?

在将
.php
添加到URI之前,请确保相应的
.php
文件存在

最好保持重定向规则优先于其他规则

这样做:

Options -MultiViews -Indexes
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php

RewriteEngine On

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

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

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

我懂了。非常感谢你的建议。我将把重定向规则放在其他规则之前。