如果您有如下网址:
http://www.example.com/400x200
当用户使用 php 访问该 url 时,是否可以创建一个回显 400x200 的页面?
我知道如何回显路径 - 这很容易(ltrim($_SERVER['PATH_INFO'], '/')
),但不知道如何动态创建页面。
任何帮助将不胜感激,在此先感谢
您可能希望查看 Apache Rewrites 以重写您的 URL:
不知道动态创建页面是什么意思,但我想使用 ofmod_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 进行print_r($_GET)
操作,我会得到以下信息:index.php
http://localhost/400x300
Array ( [dimensions] => 400x300 )
这是来自$_GET
PHP 中的标准超全局数组,可以正常使用。URL 重写将 URL 保留在浏览器中,但允许您通过查询字符串将其转换为 PHP 可用的 URL。
为了使您的脚本更易于使用,您可以拆分表达式以获得单独的 X 和 Y 值:
RewriteRule ^(\d+)x(\d+)/?$ index.php?x=$1&y=$2 [L]
这将给出一个这样的数组:
Array ( [x] => 400, [y] => 300 )
请求 URI ( /400x200
) 存储在服务器 superglobal:$_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 项目中复制的,以防有人询问)。
使其成为 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;