漂亮的网址与PHP和.htaccess

时间:2012-04-26 21:42:26

标签: .htaccess friendly-url pretty-urls

请放轻松我,因为这对我来说是一个全新的世界。

所以我已经构建了Little cms并使用GET来控制url中的pageID或页面永久链接。当只通过查询字符串传递1个变量时,脚本工作正常

例如我的htaccess:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9]+)$ index.php?p=$1
RewriteRule ^([a-zA-Z0-9]+)/$ index.php?p=$1

然后我可以通过我的索引文件中控制的id或永久链接来调用我的页面。我未能弄清楚的一件事是如何在调用子页面时在URL中包含父永久链接。

另一个例子。如果我调用的页面是父母的孩子:

http://site.com/index.php?p=post-title

如果标题后是父母标题的孩子;我该如何使用网址

http://site.com/parent-title/post-title?

1 个答案:

答案 0 :(得分:0)

首先,我们可以将所有代码放在Apache .htaccess文件中。这看起来像这样:

  Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^users/(\d+)*$ ./profile.php?id=$1
RewriteRule ^threads/(\d+)*$ ./thread.php?id=$1
RewriteRule ^search/(.*)$ ./search.php?query=$1

让我们从顶部开始,向下工作,以更好地了解这里发生了什么。第一行使用Options指令设置环境以遵循符号链接。这可能是必要的,也可能不是必需的,但是一些Web主机使用符号链接(类似于MacOSX中的别名或快捷方式是Windows)来处理常见的HTTP请求错误,这些通常是符号链接文件,或者至少这是我理解推理的方式。接下来我们告诉Apache我们将使用重写引擎。接下来的两行非常非常重要,它将URL重写仅限于实际不存在的路径。例如,这可以防止以下规则与example.com/images/logo.png匹配。第一个使用!-d标志防止现有目录,第二个使用!-f表示忽略现有文件。 接下来的三行是实际的URL重写命令。每行创建一个规则,尝试将正则表达式模式与传入的URL匹配