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

Я видел несколько примеров противоположного, но я собираюсь перейти от 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 ответа

Решение

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

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

var redirectFragment = window.location.hash.replace(/^#/,'');
if ( '' !== redirectFragment ) {
    window.location = 'http://new.html-site.com' + redirectFragment;
}

Я автор поста, на который вы ссылаетесь. 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];
}

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

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

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

Другие вопросы по тегам