301 перенаправление с динамического URL в подпапке на новый статический URL - PullRequest
0 голосов
/ 23 ноября 2011

Я рассмотрел все различные решения для перенаправления динамических URL-адресов на статический URL-адрес, но не смог найти ни одного случая, связанного с моим вопросом.

Я хотел бы знать, какое должно быть правильное правило перенаправления 301 для .htaccess

Дополнительная информация:

  • Старые URL были удалены после запуска нового сайта.
  • Старые URL-адреса находятся в подпапке (/ desarrollo / mantedores /)
  • "art_id" - это строка, а "61" - это статья.

В данном случае я хочу перенаправить старые динамические URL-адреса к их отдельным статическим URL-адресам.

Старый URL = http://example.com/desarrollo/mantenedores/art_indice.asp?art_id=61

Новый URL = http://example.com/comunidad/articles/2/tipos-de-sociedades

Спасибо ... * * 1023

1 Ответ

1 голос
/ 23 ноября 2011

Пожалуйста, попробуйте заполнить файл перезаписи карты (см. здесь ), чтобы соответствовать URL-адресу назначения.

Создайте файл карты, куда вы поместите все нужные категории:

RewriteMap mapoldtonew \
  dbm:/web/htdocs/yoursite/rewriterules/mapoldtonew.map

Что касается вашего образца, ваш файл карты может быть заполнен такими вещами, как:

art_id=61        articles/2/tipos-de-sociedades
...

Затем перейдем к сложной части:

RewriteCond %{REQUEST_URI} desarrollo/(.*)
RewriteCond %{QUERY_STRING} (([^=]+)=([0-9]+))
# The following rule doesn't touch the URL, but 
# will try to search into the map file and
# create an OLDTONEW environment variable with the string found
# and if not found, assign OLDTONEW to "notfound"
RewriteRule . - [QSA,E=OLDTONEW:${mapoldtonew:%1|notfound}]

# if the OLDTONEW is not empty and is not found:
RewriteCond %{ENV:OLDTONEW} notfound
# this should never happen => 404:
RewriteRule . - [R=404,L]

# Reach here means :
# - OLDTONEW is empty
# - OLDTONEW is was found
# => if OLDTONEW is not empty:
RewriteCond %{ENV:OLDTONEW} !^$
# make the redirection to the corresponding found:
RewriteRule . /%{ENV:CATEGORYREVERSE} [QSA,L]

Это должно работать,Если он не пытается изменить %1 на %2 в директиве first RewriteRule.Если этого не произойдет, у вас может быть достаточно подсказок, чтобы закончить работу.Если вам не хватает подсказок ...

Два совета:


Пожалуйста, попробуйте использовать директиву RewriteLog: она поможет вам отследить такие проблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

...