如何让自定义403页面设置和url重写共存?

How to make the settings of custom 403 page and url rewriting coexist?

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

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

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

这是我的 .htaccess 文件中的相关代码:

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

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ .php
RewriteRule ^([^/]+)/([^/]+)/$ //.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ // [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 (.*)$ // [R=301,L]

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

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