【问题标题】:Custom 404 Rewrite + Exclude main dir from rewriting自定义 404 重写 + 从重写中排除主目录
【发布时间】:2012-01-14 19:56:23
【问题描述】:

我使用.htaccess 来显示我的 404 页面,同时在浏览器中显示请求的 URL 而不是实际的 404 URL。为此,我的.htaccess 中有这一行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /404.php [L]

每当我转到一个不存在的文件(即blalba.php)时,这都很有效。

问题是:当我尝试访问我的主站点 dir(即http://example.com/)时,我看到了 404 页面。当我直接转到我的索引文件(即http://example.com/index.php)时,一切正常。


如何将.htaccess 修改为not 重定向我的主dir

因此,实际上,主 dir 已从上面的重写代码中排除。

回答:

查看下面的答案并添加RewriteCond %{REQUEST_FILENAME} !-d 解决了问题!

【问题讨论】:

    标签: .htaccess mod-rewrite redirect http-status-code-404


    【解决方案1】:

    我很确定你只是忘了告诉 apache,如果 url 中没有任何内容,它需要“默认”为 index.php。以下是你的做法:

    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
    

    关于404的其他回答

    几天前我遇到了同样的问题。很简单:将错误文档分配给404.php。每当出现 404 时,服务器都会进行内部重定向,以便它可以正确地制作网页。

    这是我的虚拟主机配置示例:

    <VirtualHost *>
        ServerName x.fr
        ...
        ErrorDocument 404 /404.php
        # activate rewrite engine:
        RewriteEngine On
    
        # *IMMEDIATELY* treat 404
        # if 404.php then stop immediately
        RewriteRule /404.php - [QSA,L]
    
        # From now on your can apply all your rules:
        ...
        ...
        ...
        # Sample of how I do a 404:
        RewriteCond %{ENV:PATH_LOCAL} notfound
        # "not found" 404 :
        RewriteRule .* - [R=404,L]
    </VirtualHost>
    

    您应该能够使用适当的 404“过滤”创建自己的重写规则。

    希望这会有所帮助!

    【讨论】:

    • 不幸的是,我无法让它按照我想要的方式工作。 http://example.com/ 仍然显示 404 - 因为我是 htaccess 的新手,所以我可能犯了一个错误,但我无法从我的重写规则中“排除”主目录。
    • 哈哈!我没有正确阅读您的问题!我添加了另一个答案
    • 在尝试您编辑的答案后,它仍然将“/”重定向到 404.php,但是在尝试更多并添加 RewriteCond %{REQUEST_FILENAME} !-d 之后,它现在可以工作了 :)
    • 那么简单吗?该死,有时我会忘记在做其他任何事情之前要检查的最基本的东西......
    【解决方案2】:

    以下规则重定向到contact.html,其中subject=引用了失败的页面

        ErrorDocument 404 /contact.php
        RewriteRule ^contact\.php$ /contact.html?subject=%{REQUEST_FILENAME} [L,R]
    

    【讨论】:

    • 注意:在本例中,中间文件contact.php不需要实际存在!
    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    相关资源
    最近更新 更多