我环顾四周,并尝试对此主题进行自己的研究,但仍无济于事。
我设置了一个动态网页,以从数据库中查找ID以检索所需的元素。这当然导致网页看起来像www.site.com/page?id=1
我想要的结果就像该页面的标题一样。
例如说我有一种水果产品,并且用户访问了我的网站并转到地址/fruit
,那么它就是?id = 1的内容。
我已经在许多站点上看到了此用法,但不确定如何编程或工作。这与htaccess文档有关吗?
先谢谢了。感谢所有帮助。
答案 0 :(得分:1)
尽管已经多次询问和回答了这个问题,但我知道许多人发现很难找到它,因为有很多与之相关的常见“噪音”字眼。因此,我认为值得再次回答。
如果您使用Apache作为您的网络服务器(假设您提到.htaccess
就是我的假设),那么创建这些“干净的URL”所需的就是mod_rewrite
,它采用了一组规则,并将浏览器请求的URL重写为另一个路径或脚本。
您通常会在您的Apache配置或.htaccess
中启用它,并且以简单的形式(一对一映射),它看起来像这样(已安装mod_rewrite
):
RewriteEngine On
RewriteRule ^fruit$ index.php?type=1 [L]
现在很明显,如果您要创建一堆动态页面,伸缩性就不好,所以您可以做的是告诉不是真正文件或目录的所有页面都传递给文件进行处理,就像这样:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
在这种情况下,我们会将无法解析为真实文件或目录的所有请求重写为index.php,然后使用“ last”标志[L]
停止处理其他规则。然后,在我们的PHP脚本中,我们可以使用/fruit
并执行我们想要的任何条件逻辑来访问虚拟路径(在这种情况下为$_SERVER['PATH_INFO']
)。如果该变量没有任何内容,请确保在您的Apache配置或.htaccess
中设置了AcceptPathInfo On
指令。
在没有任何重写规则的情况下测试基本概念/逻辑的一种方法是使用类似https://example.com/index.php/fruit
的URL。然后,您会在index.php $_SERVER['PATH_INFO']
中看到包含字符串/fruit
。您可以将URL重写到其他目录中的文件,链重写规则,将浏览器重定向到其他URL,甚至编辑环境变量。
关于使用mod_rewrite
来获取干净的URL,有很多很好的教程,因此,我不会在这里尝试涵盖所有细微差别。只是知道这是一个非常强大的工具,但是如果您对正则表达式不太满意,或者迷失了配置中常见的许多规则,那么打破规则也很容易。
请注意,如果这是一个现有站点,您还需要使用mod_rewrite
或mod_redirect
将旧的URL重定向到新的URL,这样它们就不会损坏(并为您带来好处)具有用于搜索排名的单个URL)。