Итак, я работаю над сайтом для журнала, и мне нужен 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
к чему-нибудь еще и перейдите к этому, он работает. Понятия не имею почему. Я хотел бы дать ссылку на полный сайт, но он все еще находится в разработке, поэтому мне не разрешено.
Ваше правило перезаписи может быть бессмысленным для сервера:
RewriteRule ^latest /latest.php [L]
Означает "если кто-то хочет получить доступ к чему-то, что начинается с "latest
"затем иди в"/latest.php
".
Итак, сценарий таков: вы пытаетесь получить доступ к "latest
", который перенаправлен на"/latest.php
" затем "/latest.php
"перенаправлен на"/latest.php
"и так далее. Переходит в бесконечный цикл перенаправления = 500 internal server error
.
Это правило может быть более подходящим:
RewriteRule ^latest(/|)$ /latest.php [L]
Что означает: если есть URL latest
или lastest/
затем перейдите к /latest.php
Кстати, я бы предложил добавить нечувствительность к регистру = NC
и добавить строку запроса QSA
к вашему rewriterule, это закончится примерно так:
RewriteRule ^latest(/|)$ /latest.php [QSA,NC,L]
Может это правило такое же, я не тестировал:
RewriteRule ^latest/?$ /latest.php [QSA,NC,L]