如果你有一个网址,如下所示:
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;