Как mod_rewrite / RewriteRule в .htaccess перенаправить все URL-адреса «_escaped_fragment_» в статическую папку snpashot html для обработки AngularJS SEO

0

Я искал, читал и экспериментировал весь день, но не мог заставить его работать.

На моем сайте angularjs у меня есть

$locationProvider.html5Mode(false);
$locationProvider.hashPrefix('!');

Итак, мои ссылки похожи,

http://example.com/#!/home
http://example.com/#!/folder1/folder2

Согласно AngularJS SEO docs, сканеры будут видеть выше ссылки, как,

http://example.com/?_escaped_fragment_=/home
http://example.com/?_escaped_fragment_=/folder1/folder2

Теперь моя цель - написать некоторые правила в.htaccess, чтобы перенаправить искателей в какую-то папку моментального снимка и статические html файлы. Итак, когда сканеры пытаются перейти к ссылкам выше, они должны быть перенаправлены,

http://example.com/snapshot/home
http://example.com/snapshot/folder1/folder2

У меня почти нет опыта с файлами.htaccess и очень мало знаний о Perl Regex.

Пожалуйста, не давайте только ссылки в качестве ответов, так как я googled и пробовал много комбинаций.

Я также ссылался на qaru.site/questions/9600679/... и экспериментировал с моим файлом.htaccess, но не мог перенаправить ее в папку моментальных снимков.

Может ли кто-нибудь помочь мне заставить его работать?

*********************** ОБНОВЛЕНИЕ 1 ************************* *******

Согласно ответу @Olaf Dietsche, я написал эти 2 строки (и только эти 2) в моем файле.htaccess

RewriteCond %{QUERY_STRING} _escaped_fragment_=([^&]*)
RewriteRule ^$ /snapshot/%1 [R,L]

В результате я бью

http://example.com/?_escaped_fragment_=/home

в моем браузере URL-адрес становится

https://example.com:80/snapshot//home?_escaped_fragment_=/home

ожидается http://example.com/snapshot/home

Итак, текущие проблемы,

  1. "http" становится "https", следовательно, возникает ошибка подключения SSL
  2. номер порта: 80 приходит внезапно, которого там не было
  3. 2 косые черты "//" после моментального снимка
  4. после "дома" также остается прежний "_escaped_fragment _ =/home", которого не должно быть

Помоги пожалуйста...

  • 0
    Я понятия не имею, откуда приходит https или порт :80 . В вашей конфигурации должны быть другие директивы.
  • 0
    Думаю, я сам по себе :( ... Есть какой-нибудь указатель, где я могу провести какое-нибудь исследование / исследование и получить представление о директивах / конфигурации?
Показать ещё 2 комментария
Теги:
.htaccess
mod-rewrite

1 ответ

2

Я не знаком с Angular, но причина, по которой он не перенаправляется, заключается в том, что правила в цитированном вопросе переписываются вместо перенаправления. См. Также Понимание различий между перенаправлением и переписыванием.htacess.

Чтобы перенаправить, вы должны либо указать абсолютный URL-адрес другому домену в качестве цели, либо добавить флаг R|redirect, например

RewriteCond %{QUERY_STRING} _escaped_fragment_=/([^&]*)
RewriteRule ^$ /snapshot/%1? [R,L]

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

  • 0
    Привет @ Олаф, Спасибо за ваш ответ. Извините за эту редиректную вещь, мне нужно предоставить сканерам статический html, так как мой сайт полностью основан на ajax. Я включил ваши изменения в файл .htaccess. Но проблема не устранена. Я обновил свой вопрос с помощью [ОБНОВЛЕНИЕ 1]. Думаю, мне нужно немного больше твоего руководства и помощи. Еще раз спасибо за ваше терпение.
  • 1
    Чтобы избежать двойной косой черты // , я настроил RewriteCond . Строка запроса может быть удалена путем добавления одного знака вопроса. Смотрите обновленный ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню