用PHP创建一个Catch-All Handler?

Reg*_*ser 5 php url redirect catch-all

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

http://profiles.mywebsite.com/ sometext

有些文字是变化的.

例如,它可以是某些用户,它可以是john等,然后我想要一个PHP文件来处理来自该结构的请求.

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

感谢那些回答的人!

Sha*_*nov 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>
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

你应该使用重写规则..

在 apache (.htaccess) 中,是这样的:

<IfModule mod_rewrite.c>
    RewriteEngine On

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

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