Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用htaccess的情况下使用php清理url?_Php_.htaccess - Fatal编程技术网

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

如何在不使用htaccess的情况下使用php清理url?,php,.htaccess,Php,.htaccess,我用PHP做的一个项目有一个问题,它在URL中 当我加载index.php之类的脚本时,一切正常,问题是当我加载位于两个或多个目录中的脚本时 在URL中,带有路由的脚本开始被嵌入 这是我遇到的问题的一个例子 我需要加载一个脚本,即使它处于多个嵌套级别,也要使其功能在url中反映为: 我需要这样的东西 : 我先谢谢你 关于您不能使用PHP来实现这一点。PHP不负责确定PHP是否让特定的PHP脚本处理任何给定的URL 您必须配置Web服务器才能执行此操作。由于您提到了.htaccess,但没有提供关

我用PHP做的一个项目有一个问题,它在URL中

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

在URL中,带有路由的脚本开始被嵌入

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

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

我需要这样的东西

: 我先谢谢你


关于

您不能使用PHP来实现这一点。PHP不负责确定PHP是否让特定的PHP脚本处理任何给定的URL

您必须配置Web服务器才能执行此操作。由于您提到了.htaccess,但没有提供关于服务器的更多信息,因此我假设您使用的是ApacheHTTPD

对于Apache,这意味着使用mod_rewrite、别名或类似的东西。您可以将这些工具的配置放在.htaccess中,但您不希望和

因此,请将mod_rewrite或Alias配置放在Apache主配置中。

无论如何,您都需要一个htaccess规则。然而,它不一定是一个mod_重写规则。之所以需要这个规则,是因为PHP不负责路由——它只负责脚本的执行

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

基本上有两种方法

方式1清洁器:mod_重写 这非常简单,您需要的规则集如下:

# 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]
ErrorDocument 404 /welcome/script32.php
请求的URL现在位于$\u服务器['QUERY\u STRING']中,您现在可以在PHP中使用它执行任何操作

方式二:全垒打 这不依赖于mod_重写,因此可能会稍微快一点。然而,从技术上讲,这是一个廉价的黑客。解决办法如下:

# 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]
ErrorDocument 404 /welcome/script32.php

请求的URL现在可以在$\u服务器['REQUEST\u URI']中找到,并且可以在PHP中进行解析。然而,通过这种方式,您还禁用了通过apache生成的合法404错误,并且应该确保遵守PHP中的正确行为以进行补偿。

添加您尝试的代码片段,以便其他人可以帮助您。