带有 php 和 .htaccess 的漂亮 url

Posted

技术标签:

【中文标题】带有 php 和 .htaccess 的漂亮 url【英文标题】:Pretty urls with php and .htaccess 【发布时间】:2012-05-07 16:23:17 【问题描述】:

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

所以我已经构建了 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

如果 post-title 是 parent-title 的子项;如何使用网址

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

【问题讨论】:

你是在说当有人请求 http://site.com/parent-title/post-title 时,请求会被重写到你的 index.php 控制器,比如 /index.php?p=post-title&parent=parent-title 我已经想到了,但我想知道是否有一种方法可以在仅调用后标题时自动包含父标题我确信有一种方法,但 mod_rewrites 几乎都是英文我。但是要回答你的问题。是的,我很喜欢你的建议,但仍然保持干净的网址 所以你的意思是:/index.php?p=parent-title/post-title? 嗯,这更像是您的第一个建议/index.php?p=post-title&parent=parent-title,但不仅调用子页面,还自动将父页面包含在 url 中。希望自从 当有人请求http://site.com/parent-title/post-title时,你希望URI是什么样的? 【参考方案1】:

首先,我们可以将所有代码放在 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 指令将环境设置为遵循符号链接。这可能是必要的,也可能不是必要的,但是一些网络主机使用符号链接(类似于 MacOSX 中的别名或快捷方式是 Windows)来处理常见的 HTTP 请求错误,这些通常是符号链接文件,或者至少这是我理解的推理方式。接下来我们告诉 Apache 我们将使用重写引擎。接下来的两行非常非常重要,它将 URL 的重写限制在实际不存在的路径上。例如,这会阻止以下规则匹配 example.com/images/logo.png。第一个使用 !-d 标志防止现有目录,第二个使用 !-f 表示忽略现有文件。 接下来的三行是实际的 URL 重写命令。每行都会创建一个规则,尝试将正则表达式模式与传入的 URL 进行匹配

【讨论】:

以上是关于带有 php 和 .htaccess 的漂亮 url的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess : 带有任意数量+参数名称的漂亮 URL

带有 Angularjs/.htaccess 的漂亮 url

htaccess 和漂亮的网址

HTACCESS RewriteRules 带有漂亮的 SEO 网址(不允许访问物理文件位置)

.htaccess 漂亮的 URL 不包括 index.php 并在末尾添加尾随 /

PHP .htaccess -> 漂亮的 url(反向)