php URL解释 - 无法加载自定义404页面

时间:2013-04-10 10:42:02

标签: php url interpreter

根据以下代码:

如果用手输入的网址是: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]

代码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';
}

代码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;
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

一些常见的反馈,而不是直接解决您的问题,只是阻止它们:

#SEO friendly linking
...

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

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

$translate = array(
    'yazılar'  => 'yazilar',
    'iletişim' => 'iletisim',
    '...'      => '...',
);

if (isset($translate[$_GET['page']])) {
    $sayfa = $translate[$_GET['page']];
}

以后switch ($sayfa)完全相同。