Запрошенный URL не найден на этом сервере .htacess

Я пытаюсь переписать URL-адрес, например:

example.com/speciality_details.php?id=23&name=ent

К

example.com/specialities/23/ent

Но я получаю эту ошибку:

Not Found
The requested URL was not found on this server.

Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 404 Not Found.

Это мой .htaccess файл

RewriteEngine on
RewriteRule ^doctor/([0-9]+)/([^/.]+)$ doctor_details.php?id=$1&name=$2 [NC,L] 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/specialities/([0-9]+)/([^/.]+)$ speciality_details.php?id=$1&name=$2 [NC,L] 

Первый RewriteRule работает, а второй не работает

Пожалуйста, помогите мне узнать, в чем проблема. Как мне переписать код?

в .htaccess вы упомянули специальности, где, как и в вашем URL, вы добавили специальности. Ваше правило перезаписи не соответствует вашему URL-адресу, поэтому вы получаете ошибку 404.

Bhavik 21.12.2022 07:54

@Bhavik Извините, я не понял вас, не могли бы вы объяснить

Ann 21.12.2022 07:59
RewriteRule ^/specialities/([0-9]+)/([^/.]+)$ - это ваше правило перезаписи, которое вы написали. Таким образом, ваш URL должен быть example.com/specialities/23/ent ИЛИ ваш RewriteRule должен быть RewriteRule ^/speciality/([0-9]+)/([^/.]+)$
Bhavik 21.12.2022 08:02

спасибо, я изменил это на example.com/specialities/23/ent, но все равно показывает, что не найден

Ann 21.12.2022 08:29

Пожалуйста, обновите / отредактируйте свой вопрос с изменениями, которые вы внесли в URL-адрес (иначе другие читатели увидят те же ошибки). Также включите полный файл .htaccess с этими директивами (вероятно, у вас конфликт).

MrWhite 21.12.2022 12:56
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
2
5
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/specialities/([0-9]+)/([^/.]+)$ speciality_details.php?id=$1&name=$2 [NC,L]

Как и в первом правиле (которое «работает»), вы не должны сопоставлять префикс косой черты в URL-пути. А предыдущее условие (директива RewriteCond) является излишним, поскольку URL вида /specialities/23/ent никак не может соответствовать физическому файлу (может быть?).

В .htaccess URL-путь, соответствующий шаблону RewriteRule, не начинается с косой черты, поскольку префикс каталога (который всегда заканчивается косой чертой) уже удален.

Таким образом, вместо этого правило должно выглядеть следующим образом (и без директивы RewriteCond):

RewriteRule ^specialities/([0-9]+)/([^/.]+)$ speciality_details.php?id=$1&name=$2 [NC,L]

Это будет соответствовать URL-адресу формы example.com/specialities/23/ent, как в вашем примере. И предполагает, что файл, в который перезаписывается, находится speciality_details.php в корне документа.

Флаг NC (nocase) также должен быть излишним, если только вы не ожидаете смешанных версий sPeCiAlItIeS? Но если да, то это лучше решить с помощью перенаправления, поскольку переписывание потенциально может привести к проблеме дублированного контента (SEO).

Убедитесь, что вы очистили кеш браузера перед тестированием.

Хотя, судя по вашим предыдущим изменениям вопроса, похоже, что вы уже пробовали это без префикса косой черты, но в то время у вас был /speciality/23/ent, а не /specialities/23/ent в качестве URL-адреса запроса примера, что, очевидно, не соответствовало бы.

Другие вопросы по теме