重写规则和基本网址

时间:2014-10-13 00:53:21

标签: php apache .htaccess url-rewriting relative-path

当使用重写规则时,请说:

RewriteRule ^foo/(.+?)/?$ index.php?type=foo&value=$1 [NC,L]

客户端仍将此视为网址server.dom/foo/bar/(它不知道这些网址是如何在内部解析的,这当然是合理的。)

如果页面index.php生成链接(<a href="baz">link</a>),则客户端会将其解释为server.dom/foo/bar/baz。但是,index.php在许多情况下还没有完全了解网址来自哪里......

第一个想法是将“虚拟”路径的深度作为参数传递。因此,重写规则将类似于:

RewriteRule ^foo/(.+?)/?$ index.php?type=foo&depth=2&value=$1 [NC,L]

因此,index.php应该写:

<base href="../../">

或者更正式depth..(以斜杠分隔)。但是,在某些情况下,.htaccess也不了解“虚拟”路径的深度。此外,可以注意到重写规则中的最后一个斜杠(/)是可选的,这取决于斜杠是否被记下,深度是否变化。这会显着增加RewriteRules的数量......

有什么好的/更好的做法可以有力地解决这个相对链接问题(可能是因为移动网站的某些部分不会“破坏”链接)?

1 个答案:

答案 0 :(得分:2)

如果您使用漂亮的链接,我强烈建议不要使用相对链接。您可以使用以下链接:

<a href="<?php base(); ?>baz">link</a>

其中base()函数在某些config.php中定义为输出/foo/

这样,链接将解析为/foo/baz而不是/foo/bar/baz。如果您必须将网站移至其他路径,请更新base()内的config.php功能。这与许多CMS框架像Wordpress或CakePHP一样。