基于url构建PHP页面

时间:2012-06-19 09:45:28

标签: php html url dynamic

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

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

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

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

任何帮助都会非常感谢,提前谢谢

5 个答案:

答案 0 :(得分:1)

您可能需要查看Apache重写以重写您的网址:

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

答案 1 :(得分:1)

不知道通过动态创建页面是什么意思,但我想使用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_rewritehttp://www.google.com/#q=PHP+mod_rewrite

的内容

答案 2 :(得分:1)

假设你正在使用Apache,可以使用名为URL rewriting的东西来完成。在文档根目录中创建一个名为.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会。

如果我在print_r($_GET)中使用网址index.php进行http://localhost/400x300,我就会知道:

Array ( [dimensions] => 400x300 )

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


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

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

这将给出如下数组:

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

答案 3 :(得分:1)

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

您需要接受并相应地路由URI。最简单的场景:在index.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项目复制的,万一有人问)。

答案 4 :(得分:0)

将其设为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;