我的服务器上的 .htaccess 配置有问题。结合我在这里找到的许多建议和我自己有限的知识,我整理了一个 .htaccess 文件,该文件删除了.php
扩展名并删除了 .htaccess 文件index
。除了我的日志中出现许多错误之外,这一切似乎都运行良好,例如:
由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。
目前我有以下重定向设置:
www.mydomain.com/index.php > www.mydomain.com
www.mydomain.com/myfile.php > www.mydomain.com/myfile
www.mydomain.com/myfolder/myfile.php > www.mydomain.com/myfolder/myfile
任何人都可以检查我的简单 .htaccess 文件,看看你是否能发现任何问题?
这是 .htaccess 文件:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{HTTP_HOST} ^www\.domain\.com
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]
# remove index
RewriteRule (.*)index$ $1 [R=301]
# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]
# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
#unsure of but removes the slashes
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L]
更新:
当我访问时,请求超出了 10 个内部重定向问题的限制:http: //www.domain.com/index/index.php?option=com_content &view=article&id=66&Itemid=67
如果我删除它是固定的:
# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
但是,删除上述内容会导致无法查看页面。
谁能发现为什么会这样?非常感谢,
它与以下内容有关:/index/index.php 将索引作为文件夹名称和文件名,我今天早上在我的日志中注意到了这一点。
更新:
问题是由于访问具有超过 1 个递归深度的名为 index 的文件夹引起的,例如:domain.com/index/index/index.php 这有效地创建了一个循环。有谁知道我怎么能阻止这个?