У меня есть 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
, но как только я добавляю некоторые другие параметры, он перенаправляет меня на ошибку.
Я предполагаю, что код перезаписи неправильный. Это неправильно?
Если да, можете ли вы предложить мне хороший?
Если нет, где проблема может быть найдена?
Вы можете обрабатывать 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 )
RewriteRule ^(.*)$ /$1.php [L]
Попробуй так. В вас .htaccess каждый запрос, который не является файлом на диске, перенаправляется на index.php, я предполагаю, что index.php перенаправляется дальше. Я не думаю, что вы можете получить этот маршрут / foo / bar / 123 или / foo / bar только с одной строкой кода. Каждая страница нуждается в собственном правиле перезаписи. Не могли бы Вы уточнить?
Думаю, это могло бы помочь. «/index.php» делегирует неверный путь.
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
Поскольку Apache 2.2.16:
FallbackResource /index.php