Путь маршрутизации URL с PHP и Apache

Я пытаюсь создать хорошую структуру URL для моего сайта.

Мой класс маршрутизатора будет работать только в том случае, если url находится в стиле? Something = value.

Как я могу получить его, чтобы он работал как:

/something/value 

В моем .htaccess у меня есть:

 Options FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule !\.(js|txt|gif|jpg|png)$ index.php?$1 [L,QSA] 

И в моем классе маршрутизатора я делаю:

 class init { function __construct() { $URL = substr($_SERVER['REQUEST_URI'], 19) ; $URLElements = explode('/', $URL) ; // Adjust if needed. $class = $URLElements[0] ; $method = $URLElements[1] ; if(($t = substr_count($URL, '/')) > 1) { for($i=2;$i<$t+1;$i++) { echo $URLElements[$i].'<br />'; } } } 

}

Благодаря Джейсону, мой .htaccess теперь просто:

 FallbackResource /t2013/public_html/index.php 

Чтобы быстро обработать интерфейсные контроллеры с помощью Apache, используйте FallbackResource и проанализируйте URL-адрес с помощью PHP.

 FallbackResource /index.php 

htaccess должен быть чем-то вроде этого

 RewriteEngine on RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)$ $1.php?$2=$3 [QSA] 

так, например,

/ home / something / value будет перенаправлен на /home.php?something=value

Дайте ему пойти, не совсем уверен в этом, но сделали что-то подобное раньше.

С точки зрения PHP вам просто нужно настроить свой класс init на ключ от $_SERVER['REQUEST_URI'] вместо $_SERVER['QUERY_STRING'] . Вы не показываете свою полную логику здесь, но я предполагаю, что вы просто обрезаете первый / а затем взорвете URI в / для получения компонентов.

С точки зрения .htaccess вы можете просто изменить свою последнюю строку:

 RewriteRule ^.*$ index.php [L,QSA] 

Вам не нужно специально определять images / css / js здесь, поскольку RewriteCond уже делает исключения из правила перезаписи для любых фактических файлов или каталогов. Обратите внимание, что в RewriteRule я оставил флаг Query String Append (QSA) на месте, если вы все еще хотите сделать что-то вроде /controller?some=string&of=data Some /controller?some=string&of=data Если вы не ожидаете использовать строки запроса вообще с помощью своего нового URI , то вы можете опустить этот флаг.