Как разрешить три дополнительных параметра в URL от .htaccess? - PullRequest
2 голосов
/ 28 декабря 2010

У меня есть http://example.com и класс маршрутизации PHP, который проверяет, существует ли какой-либо URL.
Я хочу создать новый маршрут:

http://example.com/foo/bar/123

но пока я его открываю, Apache перенаправляет меня на страницу с ошибкой. Поэтому я использую .htaccess. Код:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)  /index.php [L]

и это работает, пока я использую http://example.com/foo, но как только я добавлю некоторые другие параметры, он перенаправит меня на ошибку.

Я предполагаю, что код перезаписи неверен. Это неправильно?
Если да, не могли бы вы предложить мне хороший?
Если нет, где может быть проблема?

Ответы [ 4 ]

2 голосов
/ 11 сентября 2011

Вы можете обработать URI с помощью php:

.htaccess:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

PHP:

if (isset($_SERVER['REQUEST_URI']))
{
    $params = explode("/", ltrim($_SERVER['REQUEST_URI'], "/"));
    print_r($params);
}

example.com/just/these/params

Выход:

Array
(
    [0] => just
    [1] => these
    [2] => params
)
0 голосов
/ 18 октября 2015

Начиная с Apache 2.2.16:

FallbackResource /index.php
0 голосов
/ 29 декабря 2010

Я думаю, это могло бы помочь. «/index.php» делегирует неправильный путь.

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
0 голосов
/ 28 декабря 2010
RewriteRule ^(.*)$  /$1.php [L]

Попробуй вот так. В вашем .htaccess каждый запрос, который не является файлом на диске, перенаправляется в index.php, я предполагаю, что index.php перенаправляет дальше Я не думаю, что вы можете получить этот маршрут / foo / bar / 123 или / foo / bar только с одной строкой кода. Каждая страница нуждается в собственном правиле перезаписи. Не могли бы вы быть более конкретным?

...