Перезапись URL с помощью .htaccess для многоязычного сайта (несколько переменных) - PullRequest
0 голосов
/ 08 февраля 2020

У меня возникли некоторые проблемы - в основном потому, что мне трудно понять, как именно работает htaccess.

Итак, я создаю этот сайт - скажем, example.com. Этот сайт использует параметры URL для получения контента. Чтобы предварительно преобразовать выходные URL-адреса, я сделал example.com/index.php?slug=about-us переписать в example.com/about-us/.

. Для этого у меня есть файл .htaccess:

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /index.php?slug=$1 [L,QSA]

Пока все хорошо. Теперь я хочу иметь возможность просматривать контент на других языках, скажем на норвежском. Нет проблем - поэтому я добавляю:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]{2})/([^/]+)/?$ /index.php?slug=$2&lang=$1 [L,QSA]

Таким образом example.com/index.php?slug=about-us&lang=no переписывается как example.com/no/about-us/. Ура! Однако - я также хочу, чтобы домашний URL, example.com принимал параметр языка, чтобы я мог иметь example.com/no/. Но если я напишу:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /index.php?lang=$1 [L,QSA]

... это перезапишет первое правило, поэтому оно больше не будет принимать параметр slug. Я уверен, что есть простой способ сделать это, но после нескольких часов поиска в Google, я все еще не мудрый. Надеюсь, кто-нибудь меня научит! : -)

1 Ответ

1 голос
/ 08 февраля 2020

Это невозможно, так как вы пытаетесь это сделать, поскольку apache не знает, когда это значение языка (например, no или eng) или когда это страница (например, about-us.)

Позвольте мне объяснить вам, как бы я это сделал:

RewriteRule ^([^/]+)/?$ /index.php?g1=$1 [L,QSA]

, так что теперь, если бы я go до example.com/about-us/, тогда это будет то же самое, что example.com/index.php?g1=about-us или Другой (ваш язык URL) будет example.com/index.php?g1=no.

теперь в PHP вам нужно проверить это так:

if($_GET['g1'] == "no")
    //Norwegian language
else if($_GET['g1'] == "about-us")
    //About us page
else
    //Page doesn't exist
...