所以我刚刚开始搞乱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>
我主要担心的是模板上的锚标签中只有网址“first”和“second”。在索引文件的开关中使用URL来确定要显示的视图。我是这样做的,所以当用户点击链接时,“first”或“second”这个词将在重写模块的后向引用中使用,并在url中显示为domain.com/first而不是domain。 COM /?ID =第一。我在这里是正确的轨道还是我错过了什么?任何有用的建议将不胜感激,谢谢。
答案 0 :(得分:2)
我在这里是正确的轨道还是我错过了什么?任何有用的建议将不胜感激,谢谢。
你走在正确的轨道上。你在这里做的事情没有错。当然,你必须调整一些东西,但总的来说,你是在正确的轨道上。您可能希望拥有为您生成链接的某些内容,某种映射或其他内容。所以“第一个”并映射到“views / firstPageView.php”。然后,您可以在index.php中使用它来处理路由以及生成链接。因此,如果“first”之类的内容变为“something_else”,则无需手动更改所有模板并进行更改。
此外,您还可以使用mod_rewrite规则处理可能的尾部斜杠。由于尾部斜杠,可以弹出很多随机性。当mod_dir认为请求是针对目录时,Apache将301将缺少尾部斜杠的URL重定向到包含尾部斜杠的URL。您可能希望使所有链接都具有尾部斜杠以避免这种情况。此外,如果您有一个尾部斜杠,<a href="first">First Page</a>
之类的相对链接可能会停止工作,因为URI基础现在是/first/
而不是/
。