基于 url 构建 PHP 页面


Build PHP page based on url

如果你有一个网址,如下所示:

http://www.example.com/400x200

当用户使用 PHP 访问该 URL 时,是否可以创建一个回显出 400x200 的页面?

我知道如何回显路径 - 这很容易(ltrim($_SERVER['PATH_INFO'], '/')),但不知道如何动态创建页面。

任何帮助将不胜感激,提前感谢

请求 URI (/400x200 ) 存储在服务器超全局:$_SERVER["REQUEST_URI"] 中。

您需要采用它并相应地路由 URI。最简单的方案:在索引.php中,放置以下代码:

$uri = trim($_SERVER["REQUEST_URI"],"/");
if (preg_match("/'d+x'd/")) {
    list($width,$height) = explode("x",$uri);
    // some logic with the above vars, e.g. include a view script
}

这样做是检查URI是否具有格式{number}x{number},提取两个数字并将它们存储在变量$width$height中。然后,您可以对变量执行任何您喜欢的操作。

为了使请求始终指向包含此代码的文件,请编辑您的 .htaccess 并输入如下内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

(.htaccess代码是从默认的Zend Framework项目中复制的,以防有人问)。

您可能需要查看Apache Rewrite以重写您的URL:

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

不知道动态创建页面是什么意思,但我想使用 mod_rewrite 是您需要的。

在您的.htaccess文件中,您必须创建一些规则,这些规则将URL重写为PHP脚本可区分的内容 - 例如URL

http://www.example.com/400x200

要得到

http://www.example.com/index.php?param=400x200

然后你可以在你的index.php脚本中做echo $_GET['param'];...

谷歌一些关于PHP和mod_rewrite的东西:http://www.google.com/#q=PHP+mod_rewrite

假设你使用的是Apache,这可以使用称为URL重写的东西来完成。在文档根目录中创建一个名为 .htaccess 的文件,并添加以下内容:

# Turn URL rewriting on
RewriteEngine on
Options +FollowSymlinks
# Rewrite rule
RewriteRule ^('d+x'd+)/?$ index.php?dimensions=$1 [L]

前两行打开重写引擎,第三行定义RewriteRule。第一部分^('d+x'd+)/?$是一个正则表达式,域后面的 URL 部分将与之匹配。

第二部分index.php?dimensions=$1是将重写为的 URI。客户端看不到这一点,但 PHP 会看到。

如果我使用 URL http://localhost/400x300 index.php 进行print_r($_GET),我会得到这个:

Array ( [dimensions] => 400x300 )

这是来自 PHP 中的标准$_GET超全局数组,可以正常使用。URL 重写使 URL 保持浏览器中的状态,但允许您将其转换为 PHP 可以使用查询字符串使用的 URL。


为了使脚本更易于使用,可以拆分表达式以获取单独的 X 和 Y 值:

RewriteRule ^('d+)x('d+)/?$ index.php?x=$1&y=$2 [L]

这将给出这样的数组:

Array ( [x] => 400, [y] => 300 )

让它成为一个 GET 变量,比如

http://www.example.com?size=400x200 

然后你可以检索字符串

$size = $_GET['size'];

我建议您做的是基于 split 或 explode() 获取值

$lw = $size.explode('x',$size);
$length = $lw[0];
$width = $lw[1];
//Manipulate the values accordingly like
echo $length.'x'.$width;