404 文件上的 .htaccess 循环问题
.htaccess loop issue on 404 files
我一直在阅读手册和本网站以寻求指导,但我需要一些帮助。
我当前的 htaccess 文件执行以下操作:
- www.被迫
- php 隐藏扩展
- 在根上添加了正斜杠
和目录文件
问题是 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]
我一直在阅读手册和本网站以寻求指导,但我需要一些帮助。
我当前的 htaccess 文件执行以下操作:
- www.被迫
- php 隐藏扩展
- 在根上添加了正斜杠 和目录文件
问题是 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]