重写 /latest 产生服务器错误

重写 /latest 产生服务器错误

因此,我正在为一本杂志制作一个网站,我希望 URL/latest重写到文件中latest.php。我正在 cPanel 托管服务器上工作,因此我将一个文件放在目录.htaccess中,/public_html如下所示(重要的行是第 8 行):

RewriteEngine On
RewriteRule ^archives/search/?$ /archives/search.php [L]
RewriteRule ^archives/([\d]{4})-([\d]{1})/?$ /archives/download.php?year=$1&issue=$2
RewriteRule ^archives/([\d]{4})/?$ /archives/download.php?year=$1
RewriteRule ^archives - [L]
RewriteRule ^admin - [L]
RewriteRule ^search - [L]
RewriteRule ^latest /latest.php [L]
RewriteRule ^contact/?$ /contact.php [L]
RewriteRule ^([a-z]+)/?$ /page.php?p=$1 [L]

ErrorDocument 404 /notfound.php
ErrorDocument 500 /dberror.php

但是,导航到 时/latest,我得到了500 interal server error。我最初以为是文件出了问题.php,但当我完全清空文件 latest.php 并且错误仍然存​​在时,这种可能性被排除了。有趣的是,当我将 更改/latest为其他任何内容并导航到该内容时,它就可以正常工作。我不知道为什么。我想提供完整网站的链接,但它仍在开发中,所以我不被允许。

答案1

您的重写规则对于服务器来说可能毫无意义:

RewriteRule ^latest /latest.php [L]

意思是“如果有人想访问某件开始于latest”则转到“ /latest.php”。

因此,场景是这样的:您尝试访问“ latest”,然后被重定向到“ /latest.php”,然后“ /latest.php”被重定向到“ /latest.php”,依此类推。它进入无限重定向循环 = 500 internal server error

这条规则可能更合适:

RewriteRule ^latest(/|)$ /latest.php [L]

这意味着:如果有 URLlatestlastest/则转到/latest.php

顺便说一句,我建议在重写规则中添加不区分大小写的 =NC和查询字符串附加QSA,这将以类似以下内容结束:

RewriteRule ^latest(/|)$ /latest.php [QSA,NC,L]

也许这个规则是一样的,我没有测试:

RewriteRule ^latest/?$ /latest.php [QSA,NC,L]

相关内容