Я пытаюсь переписать 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
работает, а второй не работает
Пожалуйста, помогите мне узнать, в чем проблема. Как мне переписать код?
@Bhavik Извините, я не понял вас, не могли бы вы объяснить
RewriteRule ^/specialities/([0-9]+)/([^/.]+)$
- это ваше правило перезаписи, которое вы написали. Таким образом, ваш URL должен быть example.com/specialities/23/ent
ИЛИ ваш RewriteRule должен быть RewriteRule ^/speciality/([0-9]+)/([^/.]+)$
спасибо, я изменил это на example.com/specialities/23/ent, но все равно показывает, что не найден
Пожалуйста, обновите / отредактируйте свой вопрос с изменениями, которые вы внесли в URL-адрес (иначе другие читатели увидят те же ошибки). Также включите полный файл .htaccess с этими директивами (вероятно, у вас конфликт).
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-адреса запроса примера, что, очевидно, не соответствовало бы.
в .htaccess вы упомянули специальности, где, как и в вашем URL, вы добавили специальности. Ваше правило перезаписи не соответствует вашему URL-адресу, поэтому вы получаете ошибку 404.