如果你有一个如下所示的网址:
http://www.example.com/400x200
当用户使用php访问该网址时,是否可以创建一个回显400x200的页面?
我知道如何回显路径 - 这很容易(ltrim($_SERVER['PATH_INFO'], '/')
),但不知道如何动态创建页面。
任何帮助都会非常感谢,提前谢谢
答案 0 :(得分:1)
您可能需要查看Apache重写以重写您的网址:
答案 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_rewrite
:http://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;