在 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/profile
domain.com/usernam/profile/edit
domain.com/usernam/inbox
domain.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 中创建一个包罗万象的处理程序?的主要内容,如果未能解决你的问题,请参考以下文章