PHP все параметры GET с mod_rewrite - PullRequest
4 голосов
/ 12 января 2011



Я проектирую свое приложение.И я должен сделать следующие вещи.Все параметры GET (? Var = value) с помощью mod_rewrite должны быть преобразованы в / var / value.Как я могу это сделать?У меня есть только 1 .php файл (index.php), потому что я использую шаблон FrontController.Можете ли вы помочь мне с этими правилами mod_rewrite?

Извините за мой английский.Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 13 января 2011

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

В .htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]

Затем на index.php:

if ($_SERVER['REQUEST_URI']=="/home") {
    include ("home.php");
}

Правило .htaccess говорит ему загрузить index.php, если запрошенный файл или каталог не найден.Затем вы просто анализируете URI запроса, чтобы решить, что должен делать index.php.

5 голосов
/ 02 июня 2012

Следующий код в вашем .htaccess перезапишет ваш URL, например, с. /api?other=parameters&added=true до /?api=true&other=parameters&added=true

RewriteRule ^api/           /index.php?api=true&%{QUERY_STRING} [L]
3 голосов
/ 13 января 2011

.htaccess

RewriteEngine On

# generic: ?var=value
# you can retrieve /something by looking at $_GET['something']
RewriteRule ^(.+)$ /?var=$1

# but depending on your current links, you might
# need to map everything out. Examples:

# /users/1
# to: ?p=users&userId=1
RewriteRule ^users/([0-9]+)$ /?p=users&userId=$1

# /articles/123/asc
# to: ?p=articles&show=123&sort=asc
RewriteRule ^articles/([0-9]+)/(asc|desc)$ /?p=articles&show=$1&sort=$2

# you can add /? at the end to make a trailing slash work as well:
# /something or /something/
# to: ?var=something
RewriteRule ^(.+)/?$ /?var=$1

Первая часть - это полученный URL. Вторая часть - переписанный URL, который вы можете прочитать, используя $_GET. Все между ( и ) рассматривается как переменная. Первый будет $1, второй $2. Таким образом, вы сможете точно определить, куда переменные должны попадать в переписанный URL, и тем самым знать, как их получить.

Вы можете сделать это очень общим и разрешить "все", используя (.+). Это просто означает: один или несколько (+) любого символа (.). Или быть более конкретным и, например, разрешены только цифры: [0-9]+ (один или несколько символов в диапазоне от 0 до 9). Вы можете найти гораздо больше информации о регулярных выражениях на http://www.regular -expressions.info / . И это хороший сайт для их проверки: http://gskinner.com/RegExr/.

1 голос
/ 13 января 2011

AFAIK mod_rewrite не обрабатывает параметры после знака вопроса - конец строки regexp для правил перезаписи совпадает с концом пути перед '?'. Таким образом, вы в значительной степени ограничены передачей параметров или их удалением при перезаписи.

...