0

我做了一些搜索,但我在 PHP 方面不是很有经验,所以我不知道我正在寻找的正确术语/单词。不过,我确实很清楚自己想做什么。

  1. 我有一个包含许多图像的网站,每个图像都有一个数据库条目(MySQL)。
  2. 我希望每个图像都有自己的登录页面,基于其数据库值。( Title, Category, Tags, 等等...)
  3. 我不想在我的服务器上为每个图像创建一个单独的 .php 文件。(例如:pinkflowers.php, redroses.php, 等等...)
  4. 应该有 1 个 PHP 模板文件,根据用户访问的 URL(变量)输出所有图像的网页。

因此,如果有人访问“mysite.com/pinkflowers.php”,该页面应该输出pinkflowers我数据库中的变量。

但是,该文件pinkflowers.php实际上并不存在,仅template.php存在,这将是我数据库中所有图像的“蓝图”。

  1. 我希望.php从浏览器的 URL 中删除。

    "mysite.com/pinkflowers.php" => "mysite.com/pinkflowers"

    我已经有了对现有页面执行此操作的代码(如下);我不确定它是否也适用于这些“虚构”页面。

    (.htaccess)    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php
    
  2. 如果用户试图访问一个没有相关数据库条目的页面(例如:“mysite.com/430jfif0ij”),他们应该被重定向到主页。

我不希望任何人给我所有的答案,但请至少引导我朝着正确的方向开始制作这样的模板。谢谢!

4

2 回答 2

2

我最终能够解决我自己的问题,同时没有给出任何答案。

我在这里遵循了本教程: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>";
}

所以所有这些方法的组合完全达到了我想要的效果。

于 2012-09-04T13:08:03.563 回答
0

让您的 .htaccess 类似于:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ template.php/$1

然后 (on template.php) 用于$_SERVER["path_info"]确定用户输入的路径 (ie /pinkflowers) 并相应地查询数据库。

我喜欢的原因$_SERVER["path_info"]是因为它不使用(或污染)GET 变量空间。

于 2012-08-28T15:18:41.863 回答