【问题标题】:php URL interpreting - can't make custom 404 page loadedphp URL解释-无法加载自定义404页面
【发布时间】:2013-04-10 19:08:17
【问题描述】:

根据以下代码:

如果手动输入的网址是:http://www.mydomain.com/nonexistingpage

然后根据CODE 2; $_GET['page'] == 'nonexistingpage'

所以$sayfa 值被分配为olmayan_sayfa'

我在 CODE 3 中说如果 $sayfa == olmayan_sayfa; 然后加载 pageis_olmayan_sayfa.inc.php 页面。

但是我得到了 404 页。

我什至无法加载 1 个 pageis_olmayan_sayfa.inc.php 页面。 所有其他情况都很好,没有问题。

你能纠正我吗?

注意:我知道我可以通过 .htaccess 创建自定义 404 页面,但我想了解我的情况和更正方法的原因。

谢谢你,BR

代码 1:.htaccess,SEO 友好的链接部分

#SEO friendly linking
RewriteRule ^yazılar/(.+)/(.+)$ index.php?page=yazılar&subject=$1&object=$2 [L]
RewriteRule ^yazılar/(.+)$ index.php?page=yazılar&subject=$1 [L]
RewriteRule ^etiketler/(.+)$ index.php?page=etiketler&subject=$1 [L]
RewriteRule ^(iletişim|etiketler|yazılar|eposta-doğrula|epostanız-için-teşekkür-ederim|yorum-doğrula|yorumunuz-için-teşekkür-ederim|yazı-ekle|yazı-doğrula|yazınız-için-teşekkür-ederim)$ index.php?page=$1 [L]

CODE 2:URL 解释,确定要分配给 $sayfa 的值

<?php
$sayfa = '';

if(!empty($_GET)) {$getsayaci = count($_GET);}

$url_check01 = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'utf-8');
$url_check02 = htmlspecialchars($_SERVER['SCRIPT_NAME'], ENT_QUOTES, 'utf-8');

if (isset($_GET['page']) AND $_GET['page'] != '')
{
    if ($getsayaci == 1)
    {
        if ($_GET['page'] == 'yazılar') {$sayfa = 'yazilar';}
        else if ($_GET['page'] == 'iletişim') {$sayfa = 'iletisim';}
        else if ($_GET['page'] == 'site-haritası') {$sayfa = 'site_haritasi';}
        else if ($_GET['page'] == 'etiketler') {$sayfa = 'etiketler';}
        else if ($_GET['page'] == 'yorum-doğrula') {$sayfa = 'yorum_dogrula';}
        else if ($_GET['page'] == 'eposta-doğrula') {$sayfa = 'eposta_dogrula';}
        else if ($_GET['page'] == 'yorumunuz-için-teşekkür-ederim') {$sayfa = 'yorum_onay';}
        else if ($_GET['page'] == 'epostanız-için-teşekkür-ederim') {$sayfa = 'eposta_onay';}
        else if ($_GET['page'] == 'hakkında') {$sayfa = 'hakkinda';}
        else if ($_GET['page'] == 'ara') {$sayfa = 'arama';}
        else if ($_GET['page'] == 'yazı-ekle') {$sayfa = 'yazi_ekle';}
        else if ($_GET['page'] == 'yazı-doğrula') {$sayfa = 'yazi_dogrula';}
        else if ($_GET['page'] == 'yazınız-için-teşekkür-ederim') {$sayfa = 'yazi_onay';}
        else {$sayfa = 'olmayan_sayfa';}
    }

    else if (isset($_GET['subject']) AND $_GET['subject'] != '')
    {
        if ($getsayaci == 2)
        {
            if ($_GET['page'] == 'yazılar') {$sayfa = 'yazarin_yazilari';}
            else if ($_GET['page'] == 'etiketler') {$sayfa = 'bir_etiket';}
            else if ($_GET['page'] == 'ara') {$sayfa = 'aranan';}
            else {$sayfa = 'olmayan_sayfa';}
        }

        else if (isset($_GET['object']) AND $_GET['object'] != '' AND $getsayaci == 3)
        {
            if ($_GET['page'] == 'yazılar') 
            {
                $sayfa = 'spesifik_yazi';
            }
            else
            {
                $sayfa = 'olmayan_sayfa';
            }
        }
        else
        {
            $sayfa = 'olmayan_sayfa';
        }
    }

    else
    {
        $sayfa = 'olmayan_sayfa';
    }
}

else if ($url_check01 == '/index.php' AND $url_check02 == '/index.php' AND ($actual_link == site1.'/' OR $actual_link == site2 ))
{
$sayfa = 'anasayfa';
}

else
{
$sayfa = 'olmayan_sayfa';
}

CODE 3:根据$sayfa值,加载相关页面

<?php
switch ($sayfa) 
{
case "anasayfa":
    require ("{$rootfolder}/load/pageis_anasayfa.inc.php");
    break;
case "yazilar":
    require ("{$rootfolder}/load/pageis_yazilar.inc.php");
    break;
case "iletisim":
    require ("{$rootfolder}/load/pageis_iletisim.inc.php");
    break;
case "eposta_dogrula":
    require ("{$rootfolder}/load/pageis_iletisim_dogrula.inc.php");
    break;
case "eposta_onay":
    require ("{$rootfolder}/load/pageis_iletisim_tesekkur.inc.php");
    break;
case "yorum_dogrula":
    require ("{$rootfolder}/load/pageis_yorum_dogrula.inc.php");
    break;
case "yorum_onay":
    require ("{$rootfolder}/load/pageis_yorum_tesekkur.inc.php");
    break;
case "etiketler":
    require ("{$rootfolder}/load/pageis_etiketler.inc.php");
    break;
case "bir_etiket":
    require ("{$rootfolder}/load/pageis_bir_etiket.inc.php");
    break;
case "yazarin_yazilari":
    require ("{$rootfolder}/load/pageis_yazarin_yazilari.inc.php");
    break;
case "spesifik_yazi":
    require ("{$rootfolder}/load/pageis_spesifik_yazi.inc.php");
    break;
case "yazi_ekle":
    require ("{$rootfolder}/load/pageis_yazi_ekle.inc.php");
    break;
case "yazi_dogrula":
    require ("{$rootfolder}/load/pageis_yazi_dogrula.inc.php");
    break;
case "yazi_onay":
    require ("{$rootfolder}/load/pageis_yazi_tesekkur.inc.php");
    break;
case "olmayan_sayfa":
    require ("{$rootfolder}/load/pageis_olmayan_sayfa.inc.php");
    break;
}

【问题讨论】:

    标签: php url interpreter


    【解决方案1】:

    您的 nonexistingpage 与您的 .htaccess 规则不匹配。

    【讨论】:

    • 您能详细说明您对我的帮助吗?我很困惑:据我所知,我知道我无法匹配我没有创建的页面,它不存在。你说这个理由是不匹配的。这看起来像一个困境,但对于这种情况,我认为这不是一个困境,而是我错了或不知道的事情。感谢用户 1737909。我尽我所能,在我的代码中我说如果你不能匹配 GET 变量,那么为这些不存在的页面加载我的自定义页面。
    • 您可以访问的 .htaccess 列表页面。不要使用它 - 相反,设置一个全局后备^([a-z]+)$ index.php?page=$1
    • "...相反,设置一个全局后备"这句话启发了我,谢谢。
    【解决方案2】:

    一些常见的反馈,并没有直接解决你的问题,只是阻止它们:

    #SEO friendly linking
    ...
    

    您不应将大量规则硬编码到网络服务器配置 (.htaccess) 中,而应该只在其中设置一条规则,将所有对不存在文件的请求定向到您的应用程序中。然后在脚本中处理请求。

    你有很多重复的代码。其中大部分可以通过创建配置数据数组来处理:

    $translate = array(
        'yazılar'  => 'yazilar',
        'iletişim' => 'iletisim',
        '...'      => '...',
    );
    
    if (isset($translate[$_GET['page']])) {
        $sayfa = $translate[$_GET['page']];
    }
    

    后面的switch ($sayfa) 完全一样。

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 2011-08-05
      • 2017-05-25
      • 2017-09-23
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      相关资源
      最近更新 更多