Как обнаружить и перенаправить с URL с помощью привязки, используя mod_rewrite / htaccess? - PullRequest
4 голосов
/ 04 августа 2010

Я видел несколько примеров обратного, но я хочу перейти от URL привязки / хеша к URL без привязки, например:

From: http://old.swfaddress-site.com/#/page/name
To:   http://new.html-site.com/page/name

Ни один из примеров на http://karoshiethos.com/2008/07/25/handling-urlencoded-swfaddress-links-with-mod_rewrite/ не работал для меня. Звучит так, будто в REQUEST_URI есть /#/stuff, но ни я, ни мой Apache (2.0.54) не видим его.

Есть идеи, прошлый опыт или успехи?

Ответы [ 4 ]

12 голосов
/ 04 августа 2010

Все, что после # является фрагментом, и не будет отправлено на веб-сервер.Вы не можете захватить его в любой момент, вам придется использовать подход на стороне клиента, чтобы захватить их.

2 голосов
/ 17 мая 2012

@ RobRuchte: не лучше ли использовать window.location.hash с заменой вместо регулярного выражения?

var redirectFragment = window.location.hash.replace(/^#/,'');
if ( '' !== redirectFragment ) {
    window.location = 'http://new.html-site.com' + redirectFragment;
}
1 голос
/ 05 августа 2010

Я автор поста, на который вы ссылаетесь.Wrikken верен, содержимое после именованного якоря не отправляется на сервер, если что-то не исказило URL.На стороне клиента вам понадобится такой JavaScript на целевой странице, чтобы перенаправить ссылки swfaddress на соответствующие URL в другом домене:

var re = new RegExp('#(.*)');
var redirectFragment = re.exec(document.location.toString());
if (redirectFragment!=null)
{
    document.location = 'http://new.html-site.com'+redirectFragment[1];
}
0 голосов
/ 11 августа 2017

Я использовал модифицированную версию ответа @ m14t. Это работает для перенаправлений, которые выглядят как http://example.com/path/to/page#fragment -> http://example.com/path/to/page/fragment. Обратите внимание, что я также объединил window.location.pathname для перенаправления, в противном случае я бы не получить полный путь для перенаправления. Если новый путь к файлу полностью отличается от старого, это не сработает.

var redirectFragment = window.location.hash.replace(/#/,'/');
if ( '' !== redirectFragment ) {
    window.location = 'http://example.com' + window.location.pathname + redirectFragment;
}

В моем случае мне нужно было встраивать фрагментированные ссылки в отдельные страницы, что является частью того, что обычно делается для улучшения SEO сайта.

...