Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Php 如何手动创建友好的URL?(菲律宾)_Php_Url_Webpage - Fatal编程技术网

Php 如何手动创建友好的URL?(菲律宾)

Php 如何手动创建友好的URL?(菲律宾),php,url,webpage,Php,Url,Webpage,如何手动创建友好的URL?(菲律宾) 因此,我创建了一个简单的php文件,它回显请求的字符串。现在它的格式是echo.php?string=bla+bla+bla&font=times 我想看到它像echo/bla+bla+bla/times如何做这样的事情(不使用外部libs)?您必须使用apache服务器中的。要将echo.php转换为echo,您需要为web服务器使用重写工具。如果你在运行Apache,它就是国王 对于其余部分,您只需要使用。您也可以使用mod_rewrite来完成这一部分

如何手动创建友好的URL?(菲律宾) 因此,我创建了一个简单的php文件,它回显请求的字符串。现在它的格式是
echo.php?string=bla+bla+bla&font=times

我想看到它像
echo/bla+bla+bla/times
如何做这样的事情(不使用外部libs)?

您必须使用apache服务器中的。要将
echo.php
转换为
echo
,您需要为web服务器使用重写工具。如果你在运行Apache,它就是国王


对于其余部分,您只需要使用。您也可以使用mod_rewrite来完成这一部分,但如果没有这个选项,可以使用纯PHP来完成。

这通常是通过
mod_rewrite
Apache扩展来完成的。在.htaccess文件中,您可以放置如下内容:

RewriteEngine On
RewriteRule ^echo/(.+?)/(.+)$ echo.php?string=$1&font=$2 [L]

第一行激活
mod_rewrite
。第二种方法设置一个路由,将匹配该模式的请求路由到所需的PHP文件。

请查看在新的Zend Framework项目中生成的.htaccess文件。您可以在不使用框架其余部分的情况下使用它,也可以将其用作您自己的URL重写方法的示例。

除了通过mod_rewrite重写URL之外,只需将php文件设置为404错误处理程序。该文件可以分析URL并确定如何处理它

 $path_parts = explode('/', $_SERVER['PATH_INFO']);
 echo $path_parts[0]. ', '.$path_parts[1].' font';
出于性能原因,您不希望将apache配置为不将某些文件类型(如gif、jpg、png等)发送到PHP进行处理


虽然您可以做许多不同的事情,如响应中所述,但如果不调整web服务器中的配置,您就无法做到这一点。

类似于404处理程序的想法,通过一个非常简单的重写规则,您可以轻松地将URL重写管理移到PHP,这可能会更容易:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . rewrite.php [L]
rewrite.php
中,您有一个正则表达式URL模式数组。这些可用于匹配当前URL(使用
$\u SERVER['REQUEST\u URI']
),并将URL的一部分移交给实际文件。然后可以将参数放入
$\u GET
数组中,并包含正确的文件

例如,阵列可能如下所示:

$rules = array(
    array(
        'articles/view/([0-9]+)',
        'articles.php?id=$1'
    ),
    array(
        'articles/delete/([0-9]+)',
        'articles.php?id=$1&action=delete'
    ),
);

不过,不要忘记发送正确的头(
http200
)。据我记忆所及,一些服务器在使用404错误处理程序时会自动发送
404
头,除非您覆盖它。问题是,“其余”并不是那么容易。你必须在不同于Apache的服务器上使用mod_rewrite或类似的东西才能使用PHP进行重写(好吧,除非你说的是类似于
index.PHP/article/id/123
,这被很多人认为是丑陋的;)@Franz我的意思是,如果mod_rewrite不是一个选项,您可以接受
echo.php/bla+bla+bla/times
并仅使用php解析它。或者您可以使用混合解决方案:mod_rewrite将
echo/anything
重写为
echo.php/anything
,然后使用基于php的URL解析。或者你可以使用mod_rewrite独占。有意义。感谢您的澄清。我知道我有点晚了,但我不喜欢这种风格的原因是它看起来与
mod_rewrite
语法完全相同,但用PHP重新实现。实际上,重建车轮似乎需要更多的工作。当然,有时PHP路由器是合适的,比如MVC风格,我们将路由到控制器操作,而不是单个PHP文件。不过,要做到这一点,请坚持使用
mod_rewrite
,它的作用与此完全相同。不过,如果您正在创建的软件无论使用哪种服务器系统都可以正常工作,这一点尤其有用。当然,您仍然需要添加上面提到的mod_重写规则,但是在其他服务器(例如lighttpd)上复制这些规则要比完整的路由列表容易得多。可能是次要的,但我觉得它很有用。当然,您可以创建一个比这个(类似mod_重写)系统更高级的系统。