18910140161

.htaccess-使用PHP-Stack溢出重写URL

顺晟科技

2022-10-19 13:01:06

71

我有一个类似于:

的URL
url.com/picture.php?id=51

如何将该URL转换为:

url.com/picture.php?id=51

我认为WordPress也是如此。

如何在PHP中创建友好的URL?


顺晟科技:

PHP不是您要找的,请查看mod_rewrite

虽然已经回答,作者的意图是创建一个前端控制器类型的应用程序,但我是张贴文字规则的问题所问。如果某人有同样的问题。

url.com/picture.php?id=51

以上应该适用于url。不使用index.php作为重定向应用程序。

如果您只想更改路由,那么添加重写规则将满足您的需要,但是,如果您想像在Wordpress中那样重写URL,那么PHP是方法。下面是一个简单的示例。

文件夹结构

根文件夹中需要两个文件,并且最好将其余文件放在单独的文件夹中,例如。

url.com/picture.php?id=51

.htaccess

url.com/picture.php?id=51

此文件有四个指令:

  1. -启用重写引擎
  2. -拒绝访问文件夹中的所有文件,将对该文件夹的任何调用重定向到
  3. -允许直接访问所有其他文件(如图像、css或脚本)
  4. -将其他内容重定向到

index.php

因为现在所有内容都重定向到index.php,所以将确定url是否正确、所有参数是否存在以及参数类型是否正确。

要测试url,我们需要有一组规则,最好的工具是正则表达式。通过使用正则表达式,我们将一击杀两只苍蝇。Url,要通过此测试,必须具有对允许字符进行测试的所有必需参数。下面是一些规则示例。

url.com/picture.php?id=51

接下来是准备请求URI。

url.com/picture.php?id=51

现在我们有了请求uri,最后一步是在正则表达式规则上测试uri。

url.com/picture.php?id=51

由于我们在regex中使用命名子模式,成功的匹配将填充数组,几乎与PHP填充数组相同。但是,当使用动态url时,填充数组时不需要检查参数。

<预> /图片/某物+文本/51 阵列 ( [0]=>/图片/一些文本/51 [文本]=>某些文本 [1]=>某些文本 [id]=>51 [2]=>51 ) picture.php?text=some+text&id=51 阵列 ( [文本]=>某些文本 [id]=>51 )

这几行代码和对正则表达式的基本了解足以开始构建一个坚实的路由系统。

完整源

url.com/picture.php?id=51

您基本上可以通过以下两种方式来实现这一点:

带有mod_rewrite的.htaccess路由

添加一个在根文件夹中调用的文件,并添加如下内容:

url.com/picture.php?id=51

这将告诉Apache为该文件夹启用mod_rewrite,如果请求它一个与正则表达式匹配的URL,它将在内部重写为所需内容,而最终用户不会看到它。简单,但不灵活,所以如果您需要更多的电源:

PHP路由

将以下内容放在.htaccess中:(注意前导斜杠)

url.com/picture.php?id=51

这将告诉它对站点中通常无法找到的所有文件运行。在其中,您可以例如:

url.com/picture.php?id=51

大型站点和CMS系统就是这样做的,因为它在解析URL、与配置和数据库相关的URL等方面允许更大的灵活性。对于零星的使用,硬编码的重写规则也很好。

这是一个.htaccess文件,它几乎将所有内容转发到index.php

url.com/picture.php?id=51

然后由您解析$_server[“request_uri”]并路由到picture.php或其他

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航