【发布时间】:2014-02-09 20:22:50
【问题描述】:
我的文件层次结构如下:
/public_html/directory/
/public_html/directory/index.php
/public_html/directory/file.php
我想将请求转发到最合适的链接。例如,
mydomain.com/directory/ 到 mydomain.com/directory/index.php
mydomain.com/directory/file 到 mydomain.com/directory/file.php
如果出现 404 或 500 错误,则将其转发至/public_html/error.php
为此,我在.htaccess 中编写了以下代码
Options +SymLinksIfOwnerMatch -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# don't touch /forum URIs
RewriteRule ^forums/ - [L,NC]
# hide .php extension snippet
#To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+).php [NC]
RewriteRule ^ %1 [R,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php
如果我提出上述请求,它会正常工作。但是如果我请求页面mydomain.com/directory/file/scrap,那么它会生成Internal Server Error
我认为这是因为file 不是目录。但我不知道如何在这里解决这个问题。请提出建议。
服务器输出的错误中还提到了最后一行关于 ErrorDocument for 500 的内容。完整的输出如下:
内部服务器错误
服务器遇到内部错误或配置错误,并且 无法完成您的请求。
请联系服务器管理员root@localhost并告知 错误发生的时间,以及您可能做过的任何事情 这可能是导致错误的原因。
有关此错误的更多信息可能在服务器错误中可用 记录。
此外,在执行过程中遇到 500 Internal Server Error 错误 尝试使用 ErrorDocument 来处理请求。
【问题讨论】:
-
对
example.com/directory/file/scrap的请求应该转发或重定向到什么地方?内部服务器错误应在 Apache 错误日志中详细说明。这可能是一个重定向循环,日志会显示更多细节。 -
@MichaelBerkowski 正如我上面提到的,我没有文件或目录作为 /public_html/directory/file/scrap。而不是它,我有 /public_html/directory/file.php
-
既然不存在应该怎么办?它应该是 404,还是应该以某种方式尝试找到
directory/file.php? -
@MichaelBerkowski 它给出了 500 内部服务器错误。我认为它会找到 file.php 并尝试附加 /scrap 之类的 file.php/scrap 并生成内部服务器错误。
-
您必须查看错误日志。 Apache 将提供有关 500 错误的详细信息,无论是 PHP 错误、重写循环还是其他原因。日志是调试 Apache 的第一站。
标签: apache .htaccess mod-rewrite redirect