如何在不使用htaccess的情况下用php清理网址?

时间:2017-04-19 04:59:59

标签: php .htaccess

我在使用PHP进行的项目中遇到了问题,并且在URL中。

当我加载像index.php这样的脚本时,一切正常,问题是当我加载一个位于两个或多个目录中的脚本时。

在URL中,包含路由的脚本开始被嵌入

这是我遇到的问题的一个例子

enter image description here

我需要加载一个脚本,即使它在几个嵌套级别中,使其功能和在url中反映为:

我需要这样的东西

enter image description here

1: 我提前谢谢你。

此致

2 个答案:

答案 0 :(得分:0)

您无法使用PHP来实现此目的。 PHP不负责确定PHP(让特定的PHP脚本)处理任何给定的URL。

您必须配置您的网络服务器才能执行此操作。既然你提到.htaccess但没有提供有关你的服务器的更多信息,我将假设你正在使用Apache HTTPD。

对于Apache,这意味着使用mod_rewrite,Alias或类似的东西。您可以将这些工具的配置放在.htaccess中,但您不想和the documentation advises not to use them

所以将你的mod_rewrite或Alias配置放在主Apache配置中。

答案 1 :(得分:-1)

无论如何,您都需要htaccess规则。但是,它不必是mod_rewrite规则。您需要此规则的原因是因为PHP不负责路由 - 它只负责脚本的执行。

规则的要点是指导apache并指示它执行正确的脚本(在您的情况下为script32.php),同时尽可能保持请求的完整性。

基本上有两种方法。

方式1(清洁工):mod_rewrite

这非常简单,您需要的规则集如下:

# If the requested file name is a valid file/inode
RewriteCond %{REQUEST_FILENAME} -f [OR]
# ...or a directory
RewriteCond %{REQUEST_FILENAME} -d
# ...then throw them straight on it
RewriteRule (.*) - [L]
# ...otherwise, redirect to script32.php with the full content of the request in query string
RewriteRule (.*) /welcome/script32.php?$1 [L]

请求的网址现在位于$_SERVER['QUERY_STRING'],您现在可以在PHP中使用它执行任何操作

方式2:catchall

这不依赖于mod_rewrite,因此可能会稍快一些。但是,从技术上讲,它是一个廉价的黑客。解决方法如下:

ErrorDocument 404 /welcome/script32.php

现在可以在$_SERVER['REQUEST_URI']中找到请求的URL,并且可以在PHP中进行解析。然而,有了这个,你也已经禁用了#34; legal"通过apache生成404错误 - 并且应该确保在PHP中遵循正确的行为来补偿。