mod_rewrite最佳实践

4

我刚刚开始尝试使用Apache的重写模块,并希望确认我是否正确,因为我看到有几种不同的方法。我的示例代码只是一个实验,但它可能最终成为我正在开发的新项目的基本结构。

这是我的.htaccess文件:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_\-]+)/?$ index.php?id=$1 [L,NC]
</IfModule>

我的索引文件:

<?php
include 'views/headerView.php';
switch(strtolower($_GET['id']))
{
    case "first": include 'views/firstPageView.php';
    break;
    case "second": include 'views/secondPageView.php';
    break;
    default: include 'views/homeView.php';
}
include 'views/footerView.php';
?>

默认的homeView模板:

<p>This is the home page.</p>
<p>To the first page. <a href="first">First Page</a></p>
<p>To the second page. <a href="second">Second Page</a></p>

我的主要关注点是在模板中的锚标签中只有"url"为"first"和"second"。这些url在索引文件中的切换中用于确定要显示哪个视图。我这样做是为了当用户点击链接时,重写模块的反向引用中会使用单词"first"或"second",并会出现在URL中,如domain.com/first而不是domain.com/?id=first。所以我是否走在正确的道路上,还是我漏掉了什么?任何有帮助的建议将不胜感激,谢谢。
1个回答

2
您正在正确的轨道上。您所做的一切都没有问题。当然,您需要进行微调,但总体来说您是正确的。您可能希望有些东西为您生成链接,例如某种映射或其他东西。因此,“first”映射到“views/firstPageView.php”。然后,您可以在index.php中使用它来处理路由以及生成链接。因此,如果像“first”这样的东西被更改为“something_else”,则您不需要手动更改所有模板。
此外,您还需要让mod_rewrite规则处理可能存在的斜杠。由于斜杠的存在,会出现很多随机性。当mod_dir认为请求是针对目录时,Apache将301重定向缺少尾部斜杠的URL到包含尾部斜杠的URL。您可能希望使所有链接都有一个尾部斜杠以避免这种情况。此外,如果有尾部斜杠,则像First Page这样的相对链接可能会停止工作,因为URI基础现在是/first/而不是/。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接