Я искал, читал и экспериментировал весь день, но не мог заставить его работать.
На моем сайте 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
Итак, текущие проблемы,
Помоги пожалуйста...
Я не знаком с Angular, но причина, по которой он не перенаправляется, заключается в том, что правила в цитированном вопросе переписываются вместо перенаправления. См. Также Понимание различий между перенаправлением и переписыванием.htacess.
Чтобы перенаправить, вы должны либо указать абсолютный URL-адрес другому домену в качестве цели, либо добавить флаг R|redirect
, например
RewriteCond %{QUERY_STRING} _escaped_fragment_=/([^&]*)
RewriteRule ^$ /snapshot/%1? [R,L]
Строка запроса добавляется к цели без изменений, если вы не добавите свою собственную строку запроса. Таким образом, чтобы удалить предыдущую строку запроса, вы можете просто добавить один знак вопроса.
//
, я настроил RewriteCond
. Строка запроса может быть удалена путем добавления одного знака вопроса. Смотрите обновленный ответ.
https
или порт:80
. В вашей конфигурации должны быть другие директивы.