繁体   English   中英

将 url 指定为 dir/file/file 时出现 500 内部错误

[英]I am getting 500 internal error when giving url as dir/file/file

当我尝试将 url 提供为https://example.com/dir/file/file 时,请求进入循环并且出现 500 错误,而它应该给出的文件不存在。 我正在使用 LAMP 堆栈。 我将 .php 隐藏在我的 .htaccess 中

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

# To internally forward /dir/foo to /dir/foo.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*?)/?$ $1.php [L]

由于您正在检查的文件名,即,您正在收到重写循环(500 错误)。 %{REQUEST_FILENAME}.php不一定与您要重写的文件相同,即。 $1.php

如果您请求/dir/file/fileREQUEST_FILENAME服务器变量是<document-root>/dir/file (无路径信息),而捕获的反向引用$1/dir/file/file

请尝试以下操作:

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

/dir/file/file请求现在将失败并显示 404,因为它正在检查/dir/file/file.php存在。

在检查请求是否映射到文件之前,您真的不需要检查它是否映射到目录(工作量是原来的两倍),除非您也有同名的目录并且您需要该目录优先(不太可能)。

另请参阅对以下更详细的 ServerFault 问题的回答https : //serverfault.com/questions/989333/using-apache-rewrite-rules-in-htaccess-to-remove-html-causing-a-500 -错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM