2014-01-08 5 views
0

Уточнение, как иметь косую черту между главной страницей и ее подстраницами.PHP - forwardlash между главной страницей и подстраницами

Текущий результат mywebsite.com/page1-subpage.php

Желаемый результат: mywebsite.com/page1/subpage.php

При попытке использовать косую черту в этом биту кода дает мне сообщение об ошибке: «/".$page->url

Полный код ниже

if($page->parent > 1){ 
    $l = getParentById($page->parent,$pages); 
    $page->url = remove_accents($l->title)."-".$page->url; 
    } 

При использовании оригинала «_» или «-» все работает отлично.

Может ли кто-нибудь помочь мне, пожалуйста? Я думаю, это довольно простая проблема. Заранее спасибо!


EDIT Дополнительный код. Надеюсь, это имеет смысл.

if(!$page->title){ 
    PError("Please fill in a page title."); 
    } 
    $page->type = sprintf("%s",Utilities::scrub($_POST['type'])); 
    $page->url = sprintf("%s",Utilities::scrub($_POST['url'])); 


if($page->type=='page'){ 
    $page->url = remove_accents($page->title).".php"; 


if($page->parent > 1){ 
    $l = getParentById($page->parent,$pages); 
    $page->url = remove_accents($l->title)."/".$page->url; 
    } 
//print_r($page); 
//exit; 

if((!$page->id)&&(file_exists("../".$page->url))){ 
    PError("Page title already exists. Please choose another title."); 
    exit(); 
    } 
} 

if($page->type == 'link'){ 

if(!$page->url){ 
    PError("Fill in a URL."); 
    } 

} 

$page->display = sprintf("%s",Utilities::scrub($_POST['display'])); 

$new=0; 
if(!$page->id){ 
    $page->id = uniqid(); 
    $new=1; 
    } 

if(SaveHeaderImage($page->id)){ 
    $page->headerimage = sprintf("%s",Utilities::scrub($_FILES['headerimage']['name'])); 
    } 

if($new){ 
    array_push($pages,$page); 
} 
else{ 

    foreach($pages as &$l){ 
     if($l->id == $page->id){ 
      $l = $page; 
      break; 
      } 
     unset($l); 
    } 

} 

EDIT 2: Функция

function remove_accents($string) 
{ 

$table = array(
    'Š' => 'S', 'š' => 's', 'Ð' => 'Dj', 'ð' => 'dj', 'Ž' => 'Z', 'ž' => 'z', '?' => 'C', '?' => 'c', '?' => 'C', '?' => 'c', 
    'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'e', 
    'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'n', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 
    'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss', 
    'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e', 
    'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 
    'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b', 
    'ÿ' => 'y', '?' => 'R', '?' => '?', 
); 

$string = strtr($string, $table); 
$string = strtolower($string); 
$string = preg_replace('#[^a-z0-9/]+#', '-', $string); 
$string = trim($string, '-');  
return $string; 
} 
+0

Это должно сработать, в вашем коде должна быть какая-то другая проблема. – Revent

+0

Какое сообщение об ошибке вы получаете? – Braunson

+0

@Revent Спасибо за ваши ответы. Я получаю внутреннюю ошибку сервера. Как ни странно, при использовании тире «-» или подчеркивания «_» все работает нормально. –

ответ

0

Может быть, из-за того, что слэш в URL означает, что есть каталог - который является "стр.1" в вашем случае - и веб сервер пытается найти подстраницы внутри этого каталога.

Если это так, у вас есть два варианта: 1. Создайте этот каталог «page1» и поместите в него свой код и попытайтесь получить доступ к подстраницам. 2. Или настройте свой веб-сервер, добавив правило перезаписи для перенаправления всех запросов на главную страницу.

+0

Спасибо Мохаммад. Хорошо, звучит логика. Я предполагаю, что нет стандартного/универсального правила перезаписи для перенаправления страниц в структуру подстраницы, основанную на перекрестном косой картине? –