代码之家  ›  专栏  ›  技术社区  ›  LOTUSMS

为404页创建重定向

  •  3
  • LOTUSMS  · 技术社区  · 7 年前

    我创建了一个404.php页面,并在我的.htaccess文件中添加了以下内容

    ErrorDocument 404 /404.php
    

    还有删除斜线,添加完整的URL等等,

    不管我做什么,我都会得到index.php用户界面,不管我在URL中写了什么事情是这样的,它没有将我重新定向到domain.com/index.php或“/”URL仍然存在,但UI是index.php内容

    我在下面加上我的re,以防你看到有冲突

    <IfModule mod_rewrite.c>
        RewriteEngine On
    
        RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
        RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
    
        RewriteCond %{SERVER_PORT} !^443$
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    
        RewriteBase /
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]
    </IfModule>
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   codisfy    7 年前

    根据我对mod_的了解,重写最后4行

    如果请求文件名不是文件或目录,

    重定向至index.php。

    我相信这就是正在发生的事情。

    应用程序中物理路径上不可用的所有路由都将 index.php .

    在应用程序中需要一些404机制如果您使用的是某个框架,它通常会抛出类似“RouteNotFound”的异常,然后错误处理程序重定向到404页面,您还可以执行类似的操作,并从应用程序内部重定向到404.php。

    if($should_be_an_error) {  
     header("Location: 404.php");
    } 
    

    (已经好几年没用过这种东西了,应该是类似的)

    或删除 `

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    

    `

    但你的其他路线可能会停止工作。

    编辑:

    因为你想重定向到 404.php 而不是 索引文件 (从注释中获取)代码应该更改为

    RewriteRule . /404.php [L]
    

    (重写块的最后一行)

        2
  •  1
  •   anubhava    7 年前

    你可以用 FallbackResource 指令删除所有以 RewriteBase / 行并使用这一行:

    FallbackResource /404.php
    

    这将回退到 /404.php 对于任何404事件。

        3
  •  -1
  •   Shahriat Hossain    7 年前

    如果符合您的要求,可以将下面的代码作为示例:

    ErrorDocument 404 http://example.com/404/
    
    RewriteCond %{REQUEST_URI} ^/404/$
    RewriteRule ^(.*)$ /404.php [L]
    
    推荐文章