Изменить URL, заканчивающийся строкой запроса - PullRequest
0 голосов
/ 15 марта 2020

Я уже некоторое время использую набор правил перенаправления, которые отлично работают.

Недавно я расширил часть своего веб-сайта и мне нужно изменить окончание определенного URL.

Старый URL: / clan / {строка запроса} / tracking / war

Новый URL: / clan / {строка запроса} / tracking / warlog

Я изменил свой файл .htaccess, чтобы новый URL работал, но мне нужен старый URL для перенаправления на новый.

В настоящее время я так перенаправление в .htaccess:

# Rewrite Clan Tracking-Warlog URL
RewriteEngine On
RewriteCond %{THE_REQUEST} /clanTracking_main.php\?name=([^\s]+) [NC]
RewriteRule ^.+$ /clan/%1/tracking/warlog [L,R]
RewriteRule ^clan/([^/]+)/tracking/warlog clanTracking_main.php?name=$1 [L]

Работает отлично, но мне просто нужна помощь с перенаправлением.

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 16 марта 2020

Я бы сказал, что первое правило ниже - это то, что вы спрашиваете ...

Я также сделал некоторые другие модификации, которые показались мне понятными ...

# Rewrite Clan Tracking-Warlog URL
RewriteEngine On

# redirect old to new
RewriteRule ^/?clan/([^/]+)/tracking/war$ /clan/$1/tracking/warlog [R=301]

# pick name from get argument and redirect
RewriteCond %{QUERY_STRING} (?:^|&)name=([^\s]+)(?:&) [NC]
RewriteRule ^/?clanTracking_main\.php$ /clan/%1/tracking/warlog [R=301]

# rewrite to php
RewriteRule ^/?clan/([^/]+)/tracking/warlog$ clanTracking_main.php?name=$1 [END]

Это Хорошей идеей будет начать с временного перенаправления 302 и изменить его только на постоянное перенаправление 301 позже, если вы уверены, что все настроено правильно. Это предотвращает проблемы с кэшированием при попытке ...

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

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

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

...