Как обнаружить и перенаправить с 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 сайта.