Перепишите название страницы на 2 языках

Я пытаюсь сделать веб-приложение с двумя языками: английским и греческим, и
Я хочу сделать чистые URL.

Мой вопрос:

Например, если один файл в моем каталоге — localhost / arxaiologikoi-xwroi.php? Lang = gr для греческого, и localhost / arxaiologikoi-xwroi.php? Lang = en для английского,

Есть ли какой-нибудь возможный способ переписать URL в моем .htaccess с помощью mod_rewrite, например localhost / gr / αρχαιολογικοι-χωροι для греческого и localhost / en / archaeological-sites для английского языка

Прошу прощения, если мой вопрос неуместен и, возможно, будет отклонен, но я видел так много руководств, постов и видео, которые действительно запутали.

Заранее спасибо

Vaggelis

0

Решение

Как я понимаю из вашего вопроса — вы хотите отобразить:

  • /gr/αρχαιολογικοι-χωροι => /arxaiologikoi-xwroi.php?lang=gr
  • /en/archaeological-sites => /arxaiologikoi-xwroi.php?lang=en

Как вы сами видите — в этом сопоставлении отсутствует информация о связи между вашим ключевым словом из URL и реальным скриптом на вашем сервере.

Обычно такая задача решается с помощью так называемого «фронт-контроллера» — скрипта, который действует как единая точка входа для всего приложения (и обычно это index.php). Этот скрипт должен принимать все URL, которые есть у приложения, и отвечает за решение, какие действия следует выполнить.

Например, в вашем случае вы можете иметь .htaccess который перенаправит все запросы на index.php:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

и в ваш index.php Вы сами решите, какой скрипт вызывать. Подходов может быть много, для примера давайте представим, что отображение определено как простой массив:

<?php

$urlMap = [
'en' => [
'archaeological-sites' => 'arxaiologikoi-xwroi',
],
'gr' => [
'αρχαιολογικοι-χωροι' => 'arxaiologikoi-xwroi',
],
];

// This will be our default language
$language = 'en';
// This is our default page
$page = 'default';
// Determine if we're handled our request or not
$handled = false;

// I don't want to invent complex routing rules so let's pretend it is simple on of:
// - /page
// - /language/page
$parts = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
$p = array_shift($parts);
if (array_key_exists($p, $urlMap)) {
// This is language identifier
$language = $p;
$p = array_shift($p);
}
if (array_key_exists($p, $urlMap[$language])) {
// We have special page for handling such request
$page = $urlMap[$language][$p];
}
// Let's find handler for our page
$path = sprintf(__DIR__ . '/scripts/%s.php', $page);
if (file_exists($path)) {
// We have handling script, load it
include_once $path;
} else {
// We have no handler for request, report "404 Not Found"header('HTTP/1.1 404 Not Found');
}

Конечно, это очень простой пример, и для реального сайта гораздо лучше использовать некоторые (микро) рамки, такие как кремнезем, Тонкий, Laravel, Symfony и т.п.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector