htaccess для перенаправления многоязычного сайта по папке; PHP - PullRequest
0 голосов
/ 15 марта 2019

Итак, сайт, над которым я работаю, на самом деле японский, и все его папки / страницы находятся в папке public_html.Однако сайту теперь нужен английский, и в прошлом мы просто создавали папку с именем / eng / и делали копии файлов, которые будут использоваться на английской странице, и хранили их в тех же папках.Этот способ работает, но чувствует себя неэффективным.Особенно, если есть общие ресурсы / данные.

Идея, которую я придумал, заключается в использовании htaccess, и если первая папка URL содержит «eng /», то она будет каждый раз перезаписывать и открывать один и тот же первый файл.(сейчас я называю это eng-ini.php) и из этого файла он попытается открыть файл на английском языке.В основном разбираем URL и затем в конечном счете require_once ()

Для самих английских страниц я бы хотел поместить их в ту же папку, что и японские, используя те же имена с префиксом "eng".Например, если бы у нас был «/ faq /» (index.html опущен) для сайта на японском языке, английским был бы «/faq/eng-index.html".

Некоторые из проблем, которые я»у меня есть, если URL-запрос НЕ является файлом HTML или PHP, как справиться с этим?Если запрос является папкой, есть ли способ сделать его по умолчанию index.php или index.html?Прямо сейчас, с вышеупомянутым методом, похоже, что мне нужно добавить эту часть вручную для оператора require_once ().

Я пытался воссоздать то, что придумал, хотя в настоящее время я не могу получить доступ к исходному файлу, так как он находится на рабочем терминале.

Соответствующие части htaccess:

# Rewrites
<IfModule mod_rewrite.c>
# -- wwwありに統一
    RewriteEngine On

#Remove multiple slashes in URLs
    RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
    RewriteRule . %1/%2 [R=301,L]

#Add Trailing Slash to folders
    RewriteCond %{REQUEST_URI} /+[^\.]+$
    RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

#Rewrite lang files
    RewriteCond %{REQUEST_URI} !^/assets
#    RewriteCond %{REQUEST_URI} \.(htm?l|php)$
    RewriteRule ^(.*)$ pageini.php?$1 [QSA,L]


</IfModule>

Соответствующие части PHP:

    <?php
    $URLinfo['original'] = substr($_SERVER['REQUEST_URI'],1);
    $URLinfo['original-split'] = explode('/',$URLinfo['original']);

//ENG page?
    $bEng = ($URLinfo['original-split'][0] == "eng");
    if($bEng == true)
    {    $URLinfo['target'] = str_replace("eng/","",$URLinfo['original']);
        $URLinfo['file-prefix'] = "eng-";
    }
    else
    {    $URLinfo['target'] = $URLinfo['original'];
        $URLinfo['file-prefix'] = "";
    }

//Target path and file
    $URLinfo['target-split'] = explode('/',$URLinfo['target']);
    $URLinfo['target-file'] = end($URLinfo['target-split']);

    if(empty($URLinfo['target-file']))
    {    $URLinfo['target-file'] .= "index.php";
    }

//Alt HTML for PHP
    if($URLinfo['target-file'] === "index.php")
    {    $URLinfo['target-file-alt'] = "index.html";
    }

    array_pop($URLinfo['target-split']);
    $URLinfo['target-path'] = implode('/',$URLinfo['target-split']);


//Request file change
    $URLinfo['request-file'][0] = $_SERVER['DOCUMENT_ROOT'] . "/" . $URLinfo['target-path'] . "/" . $URLinfo['file-prefix']  . $URLinfo['target-file'];

    if(isset($URLinfo['target-file-alt']) && !empty($URLinfo['target-file-alt']))
    {    $URLinfo['request-file'][1] = $_SERVER['DOCUMENT_ROOT'] . "/" . $URLinfo['target-path'] . "/". $URLinfo['file-prefix']  . $URLinfo['target-file-alt'];
    }


// Does requested file exist?
if(file_exists($URLinfo['request-file'][0])===TRUE)
{    $usePageTarget = $URLinfo['request-file'][0];
}
elseif(isset($URLinfo['request-file'][1]) && file_exists($URLinfo['request-file'][1])===TRUE)
{    $usePageTarget = $URLinfo['request-file'][1];
}

if (isset($usePageTarget) && !empty($usePageTarget))
{    require_once ($_SERVER['DOCUMENT_ROOT'] . "/assets/inc/new-ini.tpl");
    require_once ($usePageTarget);
    exit;
}

else
{    header("HTTP/1.0 404 Not Found");
    echo "File not found!";
    exit;
// Require 404 file
#    require_once('404.php');
}
exit;

?>
...