mod_rewrite URL для глубокой ссылки
Мне было интересно, если это было возможно в mod_rewrite, и если кто-нибудь знает синтаксис для этого.
Браузер получает:
http://example.com/video/my-first-vid/
mod_rewrite перенаправляет на:
Спасибо!
2 ответа
Кажется, вы не можете использовать mod_rewrite для перенаправления на /#/video/my-first-vid/, так как знак # имеет urlencoded, и он будет перенаправлен на http://example.com/%23/video/my-first-vid/ который, очевидно, не то, что вы ищете. Я тестировал эту пару дней назад на Apache 1.3.
Вы можете создать отдельный скрипт (ы) для перенаправления. Добавьте новые правила для этого:
RewriteRule ^video/?$ /redirector.php?page=video [NC,L,QSA]
RewriteRule ^video/(.*)$ /redirector.php?page=video&subpage=$1 [NC,L,QSA]
Но вам также может понадобиться разобрать строку запроса вручную, так как это может быть что-то вроде:
/video/my-first-vid/?refID=test
Вот несколько простых примеров на PHP:
<?php
$page = (isset($_REQUEST["page"])) ? trim($_REQUEST["page"]) : "";
$subPage = (isset($_REQUEST["subpage"])) ? trim($_REQUEST["subpage"]) : "";
// setting the redirect URL, your conditions here
if ($page == "video")
{
$url = "/#/video/" . $subPage;
}
else
{
$url = "/"; // some default url
}
header("Location: " . $url);
exit;
?>
Я не уверен насчет встраивания '#' в URI, так как обычно это идентификатор фрагмента, но вы можете попробовать это:
RewriteRule "^(?<!#/)(.*)" "#/$1" [R=301,L]
Это должно перенаправить все, что не имеет "/#" перед ним в то же место с "/#" перед ним.