因此,我正在为一本杂志制作一个网站,我希望 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]
这意味着:如果有 URLlatest
或lastest/
则转到/latest.php
顺便说一句,我建议在重写规则中添加不区分大小写的 =NC
和查询字符串附加QSA
,这将以类似以下内容结束:
RewriteRule ^latest(/|)$ /latest.php [QSA,NC,L]
也许这个规则是一样的,我没有测试:
RewriteRule ^latest/?$ /latest.php [QSA,NC,L]