【问题标题】:Redirect to homepage if file not found for specific directory如果找不到特定目录的文件,则重定向到主页
【发布时间】:2020-05-20 06:23:32
【问题描述】:

我被困在.htaccess

链接:

www.example.com/assets/images/abc.png

只要abc.png 存在于这个/assets/images 目录中,然后在浏览器中预览图像。但是如果我从这个目录中删除abc.png图像,它将重定向404找不到页面但我想重定向到主页(root url:www.example.com

我想要这样:每当特定 /assets/images 文件夹的图像文件不存在时。它应该重定向到主页。

我试过了,但没用

RewriteEngine On
RewriteBase /

#If the file does not exist assets/images folder it will redirect on homepage
RewriteCond %{REQUEST_URI} !^/assets/images/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

【问题讨论】:

    标签: laravel .htaccess url-rewriting


    【解决方案1】:

    您发布的代码是内部重写,而不是“重定向”。但是您使用的条件排除了/assets/images 子目录(使用! 前缀),因此它适用于除您想要的目录之外的所有其他目录!

    .htaccess 文件的顶部尝试以下内容:

    # If an image does not exist in /assets/images then redirect to homepage
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^assets/images/[\w/-]+\.(png|jpg|gif)$ / [R=302,L]
    

    URL 的所有模式匹配都在 RewriteRule 指令中执行 - 无需使用单独的条件。所以只测试看起来像图像的请求。

    不需要目录检查,因为我假设您没有看起来像图像文件名的目录。

    这允许/assets/images 内有多个子目录。例如。 /assets/images/foo/bar/abc.png。如果您的所有图像都直接包含在/assets/images 中,那么您可以从字符类[\w/-] 中删除斜线。

    它还假设子目录和文件名只能由字符a-zA-Z0-9_(下划线)和-(连字符)组成。

    请注意,这是一个 302(临时)重定向。

    但是,仅当直接在浏览器中请求图像时,此重定向才有意义。如果它们嵌入在 HTML img 元素中,那么重定向将被视为损坏的图像,除非您的主页实际上返回了图像?!

    【讨论】:

      【解决方案2】:

      在 app/Exceptions/Handler.php 文件中

      public function render($request, Exception $e)
          {
              if($this->isHttpException($e))
              {
                  switch ($e->getStatusCode()) 
                      {
                      // not found
                      case 404:
                      return redirect()->guest('home');
                      break;
      
                      // internal error
                      case '500':
                      return redirect()->guest('home');
                      break;
      
                      default:
                          return $this->renderHttpException($e);
                      break;
                  }
              }
              else
              {
                      return parent::render($request, $e);
              }
          }
      

      【讨论】:

      • 此渲染功能适用于整个项目,如果任何链接不起作用或找不到,则根据您的回答重定向到主页。但是,每当用户直接在浏览器中点击 url 中带有图像路径的链接时,我想在主页上重定向,如果该特定文件夹中不存在文件,那么它应该重定向到主页。
      • 在这种情况下试试这个。 RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 根据需要将其他文件扩展名添加到列表中。 RewriteCond %{REQUEST_FILENAME} \.(gif|jpg|jpeg|bmp|tiff)$ RewriteRule (.*) /relative/location/of/errorimage.jpg 这是用于图像类型的文件。
      • 生成500个内部服务器
      • /relative/location/of/errorimage.jpg 希望您已将此路径更改为 URL ?
      • 在这种情况下你可以写一个助手。检查文件是否存在(单击时)。如果存在,助手将通过其他重定向到主路由。或者,在获取图像时,您可以检查文件是否存在,如果存在则提供文件 url,否则提供主 url。
      猜你喜欢
      • 2014-02-26
      • 2021-05-06
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多