在 PHP 中创建一个包罗万象的处理程序?

Posted

技术标签:

【中文标题】在 PHP 中创建一个包罗万象的处理程序?【英文标题】:Create a Catch-All Handler in PHP? 【发布时间】:2011-07-10 05:54:54 【问题描述】:

我想让一个 php 文件捕获并管理用户访问时将发生的事情:

http://profiles.mywebsite.com/sometext

sometext 是变化的。

例如可以是 someuser 也可以是 john 等。然后我想要一个 PHP 文件来处理来自该结构的请求。

我的主要目标是让某个 PHP 文件将我的站点用户重定向到他们相应的配置文件,但他们的配置文件与该 URL 结构不同。我的目标是为我的用户提供一种易于记忆的个人资料 URL。

感谢那些回答的人!

【问题讨论】:

【参考方案1】:

一个明显的方法是通过 404 errorDocument - 保存所有与 mod_rewrite 相关的混乱。

【讨论】:

如果服务器发送 404 响应代码,搜索引擎可能不会索引页面。所以如果你使用这个方法一定要发送一个200(OK)响应码。【参考方案2】:

在 Apache 配置文件 [VirtualHost 或 Directory 指令] 或 .htaccess 文件中放入以下行:

Options -MultiViews

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteRule . /index.php [L,NC,QSA]
</IfModule>

它会静默地将所有与有效文件名或目录不对应的传入请求(上面代码中的RewriteCond确保这一点)重定向到 index.php 文件。此外,如您所见,还需要禁用 MultiViews 选项才能进行重定向 - 它通常与我放在那里的这两个 RewriteCond 冲突。

在 index.php 中,您可以通过 $_SERVER['REQUEST_URI'] 变量访问 REQUEST_URI 数据。您不应通过 GET 传递任何 URI,因为它可能会以不希望的方式污染您的 Query-String 数据,因为我们的 RewriteRule 中的 [QSA] 参数处于活动状态。

【讨论】:

谢谢!我要去试试这个! :) 嗯,URL 缩短网站也使用这种方法吗? 否 :) 那是另一个话题。 哦,好吧,将来某个时候会发布这个,但现在,应该这样做。 :)【参考方案3】:

你应该使用重写规则..

在 apache (.htaccess) 中,类似这样:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
</IfModule>

然后在您的 index.php 中,您可以在 php 代码中读取 $_GET['url']。

【讨论】:

【参考方案4】:

如果你还没有听说过 MVC,是时候听听它了,从 CodeIgniter 开始,它最简单,速度也很快,使用默认控制器,你可以有类似的 URLdomain.com/usernam/profiledomain.com/usernam/profile/editdomain.com/usernam/inboxdomain.com/usernam/inbox/read/messageid 或者明智地使用.htaccess

【讨论】:

【参考方案5】:

您可以使用 .htaccess 文件 (http://httpd.apache.org/docs/1.3/howto/htaccess.html) 将您的 url 重写为 profile.websites.com/index.php?page=sometext 之类的内容。然后你可以用 index.php 中的 sometext 做你想做的事。

【讨论】:

以上是关于在 PHP 中创建一个包罗万象的处理程序?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core razor 页面处理程序成为包罗万象的路线

ROS基本概念

ROS基本概念

nginx server_name 通配符或包罗万象

如何在生产模式下安全地使用“包罗万象”?

京东万象--新闻接口实现简单的新闻app