带有php和.htaccess的漂亮网址



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

所以我已经建立了小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?

首先,我们可以将所有代码放在 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 匹配

相关内容

  • 没有找到相关文章

最新更新