我四处搜索了一下,但我对PHP没有太多经验,所以我不知道我要找的正确术语/单词。然而,我确实很清楚我想做什么。
- 我有一个有很多图片的网站,每个图片都有一个数据库条目(MySQL)
- 我希望每个图像都有自己的登录页,基于其数据库值。(
Title
、Category
、Tags
等) - 我不想在我的服务器上为每个图像制作一个单独的.php文件。(例如:
pinkflowers.php
、redroses.php
等) - 应该有一个PHP模板文件,根据用户访问的URL(变量)输出所有图像的网页
因此,如果有人访问"mysite.com/pinkplowers.php",那么该页面应该使用我的数据库中的变量pinkflowers
输出。
然而,文件pinkflowers.php
实际上并不存在,只有template.php
存在,它将是我数据库中所有图像的"蓝图"。
-
我希望
.php
从浏览器的URL中删除。"mysite.com/pinkplowers.php"=>"mysite.com/spinkplowers"
我已经有代码可以对我现有的页面执行此操作(如下);我不确定它是否也适用于这些"想象"页面。
(.htaccess) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}'.php -f RewriteRule ^(.*)$ $1.php
-
如果用户试图访问没有相关数据库条目的页面(例如:"mysite.com/430jfif0ij"),则应将其重定向到主页。
我不希望有人给我所有的答案,但请至少引导我朝着正确的方向开始制作这样的模板。谢谢
我最终解决了自己的问题,同时没有给出答案。
我在这里学习了本教程:http://net.tutsplus.com/tutorials/other/using-htaccess-files-for-pretty-urls/
我的.htaccess
包含:
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^category1/(.*)$ ./template.php?image=$1
RewriteRule ^category2/(.*)$ ./template.php?image=$1
RewriteRule ^category3/(.*)$ ./template.php?image=$1
etc...
category#
-是我的图像分类的"文件夹"。
我在template.php
上这样做是为了从URL:中提取变量
$result = mysql_query('SELECT * FROM image_list WHERE image_name="' . mysql_real_escape_string($_GET['image']) . '"');
对于redirect
,如果主页的访问者输入了无效的URL/ID,我使用了这个:
if (mysql_num_rows($result)==0) {
echo "<script>window.location = 'http://mysite.com/'</script>";
}
因此,所有这些方法的结合正是我想要的。
让.htaccess类似于:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}'.php -f
RewriteRule ^(.*)$ template.php/$1
然后(在template.php
上)使用$_SERVER["path_info"]
来确定用户已输入的路径(即/pinkflowers
),并相应地查询数据库。
我喜欢$_SERVER["path_info"]
的原因是它不使用(或污染)GET变量空间。