404 文件上的 .htaccess 循环问题

.htaccess loop issue on 404 files

我一直在阅读手册和本网站以寻求指导,但我需要一些帮助。

我当前的 htaccess 文件执行以下操作:

  1. www.被迫
  2. php 隐藏扩展
  3. 在根上添加了正斜杠 和目录文件

问题是 php 不存在的文件 (404) 陷入从 .php/ 到 / 的 PHP 循环。不确定如何解决该问题。

关于如何停止对不存在的文件的循环有什么想法吗?

RewriteEngine on 

# CANONICAL URL
RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301] 

#REDIRECT INDEX.PHP TO ROOT
RewriteCond %{THE_REQUEST} ^.*/index.php 
RewriteRule ^(.*)index.php$ / [R=301,L] 

#REMOVE .PHP EXTENSION
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R=301,L]

#ADD TRAILING SLASH 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule . %{REQUEST_URI}/ [L,R=301]

#INTERNALLY FORWARD (example: /dir/foo to /dir/foo.php)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [L]

#PAGINATION LINKS
RewriteRule   ^(.*)/$ .php
RewriteRule ^(.*)/([0-9]+)$  .php?page=

RewriteEngine On 上方添加此行:

ErrorDocument 404 default

这将重置 Apache 配置中设置的任何 404 处理程序。

在完全清除浏览器缓存后进行测试。

完整的.htaccess:

ErrorDocument 404 default
RewriteEngine on 

# CANONICAL URL
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [L,R=301] 

#REDIRECT INDEX.PHP TO ROOT
RewriteCond %{THE_REQUEST} /index\.php 
RewriteRule ^(.*)index.php$ / [R=301,L] 

#REMOVE .PHP EXTENSION
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R=301,L]

#ADD TRAILING SLASH 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule . %{REQUEST_URI}/ [L,R=301]

#PAGINATION LINKS
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^./]+)/([0-9]+)/?$  .php?page= [L,QSA]

#INTERNALLY FORWARD (example: /dir/foo to /dir/foo.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ .php [L]