APACHE Mod Rewrite - динамические URL-адреса для семантических URL-адресов

У меня есть небольшое веб-приложение на основе Google Maps. У меня есть такие URL:

http://www.example.com/web.php?u=olives-restaurante-de-ensaladas-en-margarita

и я хочу иметь именно это:

http://www.example.com/web/olives-restaurante-de-ensaladas-en-margarita

Итак, я хочу преобразовать свой параметрический dynamic URLs в semantic URLs

Как я могу этого добиться?!

Я попытался поместить следующий код на свой .htaccess

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^web/([A-Z0-9]+)/$ web.php?u=$1

Но, к сожалению, когда я пытаюсь получить доступ к http://www.example.com/web/olives-restaurante-de-ensaladas-en-margarita, меня перенаправляет на страницу 404.

Что я делаю неправильно?


person candlejack    schedule 05.05.2017    source источник
comment
Обратите внимание, что этот вопрос связан с поисковой оптимизацией в связи с programming соблюдением рекомендаций.   -  person candlejack    schedule 06.05.2017
comment
Может мой сервер не принимает Mod-Rewrite? Как я могу это проверить?   -  person candlejack    schedule 06.05.2017


Ответы (1)


RewriteRule ^web/([A-Z0-9]+)/$ web.php?u=$1

http://www.ubikate.com.ve/web/olives-restaurante-de-ensaladas-en-margarita

Ваш шаблон RewriteRule (^web/([A-Z0-9]+)/$) не допускает дефисов, требует косой черты в конце и соответствует только заглавным буквам, поэтому он не будет соответствовать запрашиваемому URL-адресу.

Вместо этого попробуйте что-то вроде следующего:

RewriteRule ^web/([\w-]+)$ web.php?u=$1 [L]

\w — это сокращенный класс символов, эквивалентный [a-zA-Z0-9_].

person MrWhite    schedule 06.05.2017
comment
Попробуйте временно изменить это на перенаправление: RewriteRule ^web/([\w-]+)$ /web.php?u=$1 [R,L] (обратите внимание на префикс косой черты и флаг R). Что вы видите в адресной строке браузера? - person MrWhite; 06.05.2017
comment
Сделал это, я вижу то же самое: http://www.example.com/web/olives-restaurante-de-ensaladas-en-margarita/ - person candlejack; 06.05.2017
comment
Есть ли у вас какие-либо другие директивы в вашем файле .htaccess? Или любые другие файлы .htaccess по пути файловой системы? - person MrWhite; 06.05.2017
comment
Нет, это единственный, расположенный по адресу /public_html/ и у меня всего 3 линии: Options +FollowSymLinks RewriteEngine On RewriteRule ^web/([\w-]+)$ /web.php?u=$1 [R,L] - person candlejack; 06.05.2017
comment
Просто попробуйте добавить немного ерунды вверху файла. Вы получаете ошибку? (Вы должны получить ошибку 500.) - person MrWhite; 06.05.2017
comment
ВОТ ЭТО ДА! это странно! Я не получаю ошибку 500, я скачал с помощью FileZilla файл, и в нем НЕ было изменений, на сервере есть что-то вроде cache, как я могу его очистить? - person candlejack; 06.05.2017
comment
Я попробовал ваш код на своем локальном хосте, и он работает! но все CSS и изображения испорчены :( - person candlejack; 06.05.2017
comment
Не уверены в кэшированном файле на вашем сервере?! Как вы редактировали файл? Обычно, если вы не получили сообщение об ошибке, это означало бы, что файлы .htaccess не включены (вам потребуется AllowOverride All или что-то подобное в конфигурации сервера). Если CSS и изображения перепутаны, предполагается, что вы используете относительные URL-адреса, что может стать проблемой, если вы измените структуру URL-адресов. См. мой ответ на этот вопрос: stackoverflow.com/questions/43737411/ - person MrWhite; 06.05.2017
comment
Спасибо, я думаю, что вы действительно решили проблему, теперь у меня есть другие проблемы, я отмечу, что здесь есть ответ, спасибо! - person candlejack; 06.05.2017