Я пытаюсь создать хорошую структуру 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 , то вы можете опустить этот флаг.