【问题标题】:how to run a php script when a directory does not exist?当目录不存在时如何运行 php 脚本?
【发布时间】:2015-09-20 15:42:38
【问题描述】:

我知道这可能以前已经回答过,但我真的不知道如何措辞。

基本上,我正在尝试存储图像,但是在检索它们时,我希望 url 看起来像 http://www.example.com/xdfg485324

我知道 mvc .net 使用路由、控件和其他东西来做到这一点,但是有没有办法用 php 做到这一点?

我在想,也许因为找不到那个 xdfg485324 目录,我会运行一个 php 脚本并检查数据库中是否存在该图像,然后只返回实际的图像数据(我没有存储实际的图像数据库中的数据,虽然我可以)

据我所知,实际上并没有很好的理由这样做,我只是觉得它看起来更专业。

编辑:

感谢 Rasclatt 让我走上正轨并提供了一些 htaccess 代码,我能够完全按照自己的意愿去做,解决方案是这样的:

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^image/(.*)$ /test/image/?image=$1 [NC,QSA,L]

我的实际网址看起来像这样“http://localhost/test/image/235443” 我在图像目录中有一个 index.php,它在这个 url 重写后被调用。

图像/index.php

<?php
if(isset($_GET['image']))
{
    $filename = "../uploadedimages/".$_GET['image'].".jpg";
    if(file_exists($filename))
    {
        header('Content-Type: image/jpeg');
        $image = imagecreatefromjpeg($filename);
        imagejpeg($image);
        imagedestroy($image);
    }
}
?>

所有上传的文件都以 jpg 格式保存到 /test/uploadedimages 目录中,因此运行此脚本后,它会返回从 uploadimages 目录请求的图像,但 url 仍然保持不变,即使您获取 url 到图片。

【问题讨论】:

  • 如果您使用的是 apache 服务器,使用 .htaccess 文件可能是使用重写规则的最佳方法,因为如果它不是正确的地址,我认为默认情况下您的服务器只会执行错误404。如果你有一个重写,你至少可以强制每个命中转到一个文件以使用 php 进行路由。
  • 你知道这实际上是我的想法,不确定你是否必须在 html 页面上有一个 404 土地,但我想这没有意义,应该看看在我问之前进一步了解。不过谢谢,如果您想将其作为答案,我会将其标记为答案,这是我问题的解决方案
  • 我认为那是我第一次试图找出 .htaccess 重写时看到的同一篇文章,很奇怪。

标签: php


【解决方案1】:

正如我的评论中所述,如果您使用的是 apache 服务器,则使用 .htaccess 文件可能是使用重写规则的最佳方法,因为如果它不是正确的地址,我认为默认情况下您的服务器会这样做一个error 404。如果你有一个重写,你至少可以强制每个命中转到一个文件以使用 php.ini 进行路由。这是这种重写的基本示例。您将此文件放在您希望它产生影响的任何文件夹中。它也会影响所有子文件夹:

.htaccess

RewriteEngine On
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [NC,QSA,L]

以下是一些相关的 StackOverflow 参考资料:

.htaccess rewrite to redirect root URL to subdirectory

How to enable mod_rewrite for Apache 2.2

How to remove index.php from URLs?

【讨论】:

  • 我的 wamp 服务器不喜欢 RewriteEngine 命令,“无效命令 'RewriteCond'”,但这可能只是因为我在 Windows 上。不过,这回答了我的问题!
  • Windows 使用不同的类型。我认为它类似于 xml
  • 我认为是web.config 文件
  • 哦,网络配置适用于 iis 中的 .net 项目,也许也适用于 apache,不确定,但我可以使用 .htaccess 文件并重定向 404,只是试图保留 url重定向中的数据虽然
  • 啊,我只需要启用 apache rewrite_module
猜你喜欢
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
相关资源
最近更新 更多