.htaccess перенаправить подкаталоги в строки запроса - PullRequest
0 голосов
/ 30 июня 2019

Я долго искал и не могу найти ответ на свой вопрос.

Я работаю над сайтом с несколькими местоположениями и для целей SEO хочу иметь возможность использовать местоположение в URL-адресе, но сделать так, чтобы он перенаправлял их на общую страницу для всех них.

Например, я хочу перенаправить следующие URL-адреса:

www.mysite.com/newyork/page1

www.mysite.com/newyork/page2

до:

www.mysite.com/page1?location=newyork

www.mysite.com/page2?location=newyork

Не изменяя URL-адрес в целях тщеславия.

Существуют также некоторые URL-адреса, которые должны были бы перенаправлять дополнительные строки запроса на основе подкаталогов, например:

www.mysite.com/newyork/product/productname

становится

www.mysite.com/product?location=newyork&name=productname

Есть ли способ достичь этого?

1 Ответ

0 голосов
/ 30 июня 2019

Конечно, это возможно, на самом деле это прямо. Таким образом, вопрос в том, почему ни один из ответов здесь на SO не предоставил вам никакой помощи. Если вы не укажете более подробную информацию, то почему все эти ответы не помогли, поэтому с какой конкретной проблемой вы столкнулись, все, что мы можем сделать, - это предоставить еще один ответ в соответствии со всеми этими предыдущими:

RewriteEngine on
RewriteRule ^/?([^/]+)/([^/]+)/?$ /$2?location=$1 [END,QSA]
RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)/?$ /$2?location=$1&name=$3 [END,QSA]

В случае, если вы получили внутреннюю ошибку сервера (http status 500), используя приведенное выше правило, есть вероятность, что вы используете очень старую версию apache http server. В этом случае вы увидите определенный намек на неподдерживаемый флаг [END] в файле журнала ошибок http-серверов. Вы можете попробовать обновить или использовать более старый флаг [L], он, вероятно, будет работать так же в этой ситуации, хотя это немного зависит от ваших настроек.

Это правило также будет работать в конфигурации хоста http-серверов или внутри файла динамической конфигурации (файл ".htaccess"). Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http. Если вы используете динамический файл конфигурации, вам нужно убедиться, что его интерпретация вообще включена в конфигурации хоста и находится в папке хоста DOCUMENT_ROOT.

И общее замечание: вам всегда следует размещать такие правила в конфигурации хоста http-серверов, а не использовать файлы динамической конфигурации (".htaccess"). Эти динамические конфигурационные файлы добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

...