如何让自定义403页面设置和url重写共存?
How to make the settings of custom 403 page and url rewriting coexist?
在我的 .htaccess 文件中,我有重写 url 的设置,例如 http://www.myownwebsite.com/about.php
到 http://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]
在我的 .htaccess 文件中,我有重写 url 的设置,例如 http://www.myownwebsite.com/about.php
到 http://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]