Модификация к существующему .htaccess (с использованием PHP) - PullRequest
1 голос
/ 22 марта 2012

Я использую перезапись URL через htaccess.Ниже приводится содержание:

Options +FollowSymLinks
RewriteEngine on
#RewriteBase /
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d

RewriteRule ^([0-9a-zA-Z_-]+)\.php$ index.php?slug=$1 [L]

Моя текущая структура меню навигации:

<a href="home.php">Home</a>
<a href="about-us.php">About Us</a>
<a href="contact-us.php">Contact Us</a>

У меня есть столбец базы данных с именем slug, и с помощью $ _GET ['slug'] я могу запроситьБД и покажи результаты.Пока все работает нормально.

Что я пытаюсь сделать:

Я пытаюсь позволить пользователю изменить язык, на котором читается текст.У меня есть 2 изображения флагов, и они имеют гиперссылки (на самом деле языков больше).

Примеры:

<a href="<?php echo '?lang=en'; ?>">English</a>
<a href="<?php echo '?lang=pt'; ?>">Portugese</a>

Я добавил еще одну строку в .htaccess:

RewriteRule ^([0-9a-zA-Z_-]+)\.php?lang=[a-z]$ index.php?slug=$1&lang=$2 [L,QSA]

Допустим, я сейчас на странице О нас.URL будет выглядеть следующим образом: http://localhost/mysite/about-us.php

Теперь предположим, что я нажимаю «pt», чтобы сменить язык, страница переходит к: http://localhost/mysite/about-us.php?lang=pt

Если я отображаю $ _GET ['lang'] теперь он дает мне уведомление PHP:

Notice: Undefined index: lang

Поскольку $ _GET [' lang '] не определен, я не могу получить его значение и, следовательно, не могу запросить базу данных.Я также хочу убедиться, что я попал на ту же страницу, на которой находился, когда я сделал запрос на изменение языка.Поэтому, если я был на странице «Контакты» и щелкнул флажок, чтобы изменить язык на PT, я ожидаю, что страница перезагрузится, с / без отображения? Lang = pt в URL, и я хочу иметь возможность получить это значение, используя $_GET ['lang'], чтобы я мог запросить базу данных.Как это сделать?

1 Ответ

0 голосов
/ 22 марта 2012

Ваше другое правило не сработает:

RewriteRule ^([0-9a-zA-Z_-]+)\.php?lang=[a-z]$ index.php?slug=$1&lang=$2 [L,QSA]

Строка запроса не является частью URI и не будет соответствовать вашему регулярному выражению: ^([0-9a-zA-Z_-]+)\.php?lang=[a-z]$, вам потребуется использовать обратную ссылку RewriteCond %{QUERY_STRING} (your regex) и % 1, Другое дело, что обратная ссылка $ 2 отсутствует, поскольку в вашем регулярном выражении есть только одна скобка, поэтому она всегда будет пустой. Тем не менее, вам это не нужно, так как ваше исходное правило в порядке, вам просто нужно добавить QSA в качестве опции в скобках:

RewriteRule ^([0-9a-zA-Z_-]+)\.php$ index.php?slug=$1 [L,QSA]

Это означает, что любая существующая строка запроса в запросе добавляется к цели. Итак:

http://localhost/mysite/about-us.php --> index.php?slug=about-us
http://localhost/mysite/about-us.php?lang=pt --> index.php?slug=about-us&lang=pt

Строка запроса lang=pt во втором запросе просто добавляется в цель перезаписи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...