用PHP创建一个Catch-All Handler?

时间:2011-03-07 09:57:34

标签: php url redirect catch-all

我希望有一个PHP文件捕获并管理用户访问时会发生什么:

http://profiles.mywebsite.com/的 sometext

sometext 不一。

E.g。它可以是 someuser ,它可以是 john 等等,然后我想要一个PHP文件来处理来自该结构的请求。

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

感谢那些回答的人!

5 个答案:

答案 0 :(得分:15)

在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内,您可以通过REQUEST_URI变量访问$_SERVER['REQUEST_URI']数据。您不应该通过GET传递任何URI,因为它可能会以不希望的方式污染您的查询字符串数据,因为我们的RewriteRule中的[QSA]参数处于活动状态。

答案 1 :(得分:4)

您应该使用重写规则..

在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']。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

一个明显的方法是通过404 errorDocument - 保存所有与mod_rewrite混淆的东西。

答案 4 :(得分:-4)

如果您还没有听说过MVC,它是时候听到它,从CodeIgniter开始,它最简单且非常快,使用默认控制器,您可以使用类似的URL domain.com/usernam/profile
domain.com/usernam/profile/edit
domain.com/usernam/inbox domain.com/usernam/inbox/read/messageid或明智地使用.htaccess