Получить значение идентификатора страницы и отобразить его в URL-адресе через .htaccess

Я пытаюсь отобразить оптимизированные для SEO URL-адреса, используя перезапись в нашем файле .htaccess, но я не могу заставить его работать (я исследовал многие связанные темы на StackExhange и в других местах, но безрезультатно). Я хотел бы получить значение идентификатора на этой странице...

http://199.119.123.135/info/tool_surety_company.php?id=1

... и отображать значение id в URL-адресе вместо уродливого "tool_surety_company.php?id=1".

Я собираюсь получить такой результат: http://199.119.123.135/info/travelers-group

Я использую следующий код в своем файле .htaccess:

RewriteCond %{THE_REQUEST} \ /+info/tool_surety_company\.php\?id=([^&]+)
RewriteRule ^ /info/%1/? [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^^info/([^/]+)/?$ /info/tool_surety_company.php?id=$1 [QSA]

Но я получаю ошибку 404.

Любые идеи? Заранее спасибо!


person eweisbrot    schedule 12.11.2015    source источник
comment
группа путешественников ‹ как это сохраняется в базе данных? есть ли в базе URL-слаги? насколько я вижу, вы можете достичь 199.119.123.135/info/1/travelers-group что-то в этом роде   -  person Jah    schedule 12.11.2015
comment
удалите двойной ^ из последнего правила перезаписи, просто оставьте один   -  person Sergio Ivanuzzo    schedule 12.11.2015
comment
также добавьте флаг L к последнему правилу   -  person Sergio Ivanuzzo    schedule 12.11.2015
comment
Спасибо за ответ. Я попробовал ваше предложение, но все равно возвращает ту же ошибку. Есть идеи, почему?   -  person eweisbrot    schedule 12.11.2015
comment
Я предполагаю, что вы получаете 404, потому что сервер понятия не имеет, что загружать для нового URL-адреса, на который вы направляете пользователя.   -  person Justin Levi Winter    schedule 12.11.2015
comment
@Sergio, нет необходимости добавлять флаг L, если это уже последнее правило RewriteRule.   -  person Amit Verma    schedule 12.11.2015
comment
добавьте флаг R к последнему правилу и посмотрите, какой результат вы получаете   -  person Sergio Ivanuzzo    schedule 12.11.2015
comment
Какой URL вы пытаетесь?   -  person Amit Verma    schedule 12.11.2015
comment
Я пробовал все ваши предложения выше, но ни один не работал. @Justin Levi Winter Я ответил на ваш вопрос ниже относительно идентификатора и нашей базы данных. Это URL-адрес, который я тестирую по ссылке.   -  person eweisbrot    schedule 12.11.2015


Ответы (1)


Возможно, я что-то неправильно понимаю, но я считаю, что в коде на стороне сервера должен быть механизм для загрузки правильного контента для нового «удобного для SEO URL». Другими словами, конечно, вы можете перенаправить пользователя, чтобы показать другой URL-адрес, но как сервер узнает, какой контент загружать для этого нового URL-адреса?

Вот хороший ресурс для составления простого примера. https://moz.com/ugc/using-mod-rewrite-to-convert-dynamic-urls-to-seo-friendly-urls

Обновлять:

Отсюда - https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules

ПОИСК ПРОБЛЕМЫ

404 Не Найдено

Внимательно изучите новый URL-адрес в браузере. Соответствует ли он файлу, существующему на сервере в новом расположении, указанном правилом перезаписи? Возможно, вам придется сделать правило перезаписи более широким (возможно, вы сможете удалить $1 из второй строки). Это направит перезапись на главную страницу индекса, указанную во второй строке. Или вам может потребоваться скопировать файлы из старого местоположения в новое.

Другими словами, единственная причина, по которой вы получите 404, заключается в том, что сервер не находит запрошенный файл, как указано в URL-адресе, отображаемом в адресной строке вашего браузера.

Htaccess Rewrite включается с помощью модуля Apache mod_rewrite, который является одним из самых мощных доступных модулей и функций Apache. Htaccess Rewrite через mod_rewrite предоставляет специальную возможность переписывать запросы внутри, а также перенаправлять запросы извне.

Когда URL-адрес в адресной строке вашего браузера остается неизменным для запроса, это внутренняя перезапись, когда URL-адрес изменяется, происходит внешнее перенаправление. Это один из первых и один из самых больших ментальных блоков, которые возникают у людей при изучении mod_rewrite.

Дополнительная информация здесь: http://www.askapache.com/htaccess/modrewrite-tips-tricks.html

person Justin Levi Winter    schedule 12.11.2015
comment
Привет, Джастин. Значение идентификатора извлекается из нашей базы данных и уже динамически отображается для заголовка и заголовков страницы. Значение идентификатора для этой страницы ссылка – Travelers Group. Я имею смысл? - person eweisbrot; 12.11.2015
comment
Я также попробовал пример один из предоставленной вами ссылки, но он не сработал :( - person eweisbrot; 12.11.2015
comment
правильно, но как ваш сайт узнает, что загружать для /info/travelers-group? Не существует встроенного механизма для преобразования вновь созданного и запрошенного URL-адреса в значение идентификатора исходного URL-адреса. Потребуется некоторый PHP-скрипт для анализа новых параметров URL-адреса и загрузки нового контента для нового URL-адреса. - person Justin Levi Winter; 12.11.2015
comment
Насколько я понимаю, файл htaccess попадает перед страницей php, поэтому перенаправление произойдет до того, как содержимое php будет фактически отображено. - person Justin Levi Winter; 12.11.2015
comment
Я получил очень похожую переписанную работу здесь ссылка. И pennsylvania, и harrisburg переписаны путем извлечения значений штата и города. Фактический URL указанной выше страницы: jwsuretybonds.com/surety- облигации/city.php?state=37&city=13. Разве я не могу сделать то же самое? - person eweisbrot; 12.11.2015
comment
Не только с помощью правила перезаписи htaccess. Этот пример также должен включать некоторый дополнительный код на стороне сервера для анализа URL-адреса и передачи этих переменных на страницу php. - person Justin Levi Winter; 12.11.2015
comment
вы не просто переписываете URL, вы перенаправляете запрос - person Justin Levi Winter; 12.11.2015
comment
Разве это не то, что происходит с заголовком и заголовками на этой странице? 199.119.123.135/info/tool_surety_company.php?id=1. Они динамически отображаются с использованием идентификатора. Я неправильно понимаю? - person eweisbrot; 12.11.2015
comment
Я думаю, что тот факт, что заголовки и заголовок отображаются на этом URL-адресе, напрямую не применимы к тому, что вы пытаетесь здесь сделать. Да, заголовок и заголовок отображаются динамически на основе значения идентификатора для этого URL-адреса. Если вы перенаправляете пользователя на новый URL-адрес. Какой PHP-скрипт у вас есть для этого нового URL-адреса для динамического анализа нового URL-адреса для загрузки содержимого? Вам понадобится файл php в месте назначения, к которому вы пытаетесь направить пользователя. - person Justin Levi Winter; 12.11.2015
comment
@user2366546 user2366546, если вы используете правила, которые пытаетесь использовать, то такой URL-адрес http://example.com/info/travelers-group будет отправлять это на ваш PHP /info/tool_surety_company.php?id=travelers-group Вот почему вы получаете 404, потому что идентификатор больше не является числом. Вам придется искать его по имени в БД. - person Panama Jack; 12.11.2015
comment
Итак, насколько я понимаю, мне придется изменить логику в файле tool_surety_company.php. Текущая логика $suretyID = $_GET['id'];. Нужно ли изменить эту логику, чтобы переписать сработало? - person eweisbrot; 13.11.2015
comment
Да, как сказал @PanamaJack, в файле php, расположенном в /info/travelers-group, вам нужно будет использовать этот URL-адрес для возврата правильных данных. - person Justin Levi Winter; 13.11.2015
comment
@ user2366546 да, логика изменится. возможно, измените идентификатор на имя и выполните $suretyname = $_GET['name'] и выполните поиск по имени в БД. Предостережение будет дублировать имена, поэтому убедитесь, что ваши имена уникальны. - person Panama Jack; 13.11.2015
comment
Итак, я изменил логику, и теперь она работает. Однако моя перезапись в файле .htaccess вызывает ошибку. См. здесь: 199.119.123.135/info/. Любые идеи? - person eweisbrot; 25.11.2015