mod_rewrite深层链接的URL

时间:2011-02-07 15:10:15

标签: .htaccess mod-rewrite friendly-url deep-linking swfaddress

我想知道这是否可以在mod_rewrite中使用,如果有人知道它的语法。

浏览器收到:

http://example.com/video/my-first-vid/

mod_rewrite重定向到:

http://example.com/#/video/my-first-vid/

谢谢!

2 个答案:

答案 0 :(得分:0)

我不确定在URI中嵌入'#',因为它通常是片段标识符,但你可以试试这个:

RewriteRule "^(?<!#/)(.*)" "#/$1" [R=301,L]

这应该将前面的任何内容重定向到前面带有'/#'的相同位置。< / p>

答案 1 :(得分:0)

似乎你无法使用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;
?>