Мне (иногда) каким-то образом удается успешно переписать URL, но я хочу понять суть того, что я на самом деле делает.
Теперь, когда я набираю http: // localhost / admin / shop /
в адресной строке браузера, я хочу, чтобы мой htaccess переписывал URL-адрес как http: // localhost / admin.php? page = shop
, поэтому на php я могу понять, что на самом деле я имею дело со страницей магазина. Для этого у меня есть:
RewriteEngine on
RewriteRule ^(.*)\$ $1.php [nc]
RewriteCond %{REQUEST_URI} ^/admin\.php/[^/]+/$
RewriteRule ^admin\.php/(.*)/$ admin\.php?pval=$1 [l,nc]
Пока это работает. Но я хотел бы понять, почему мой код не работает, когда я делаю это:
###RewriteEngine on
###RewriteRule ^(.*)\$ $1.php [nc]
### note the commenting out the code above
RewriteCond %{REQUEST_URI} ^/admin/[^/]+/$
RewriteRule ^admin/(.*)/$ admin?pval=$1 [l,nc]
### note the removal of '\.php'
Итак, когда вы вводите http: // localhost / admin / shop / в адресную строку, php $ _SERVER ['REQUEST_URI']
распечатает точно / admin / shop /. Теперь, если предположить, что php REQUEST_URI
такой же, htaccess REQUEST_URI должен быть таким же, верно? Я действительно не знаю, используют ли они разные движки, но это то, что мне кажется логичным. Итак, если я прав, почему второй пример не работает, когда я удаляю '.php' из RewriteCond
и RewriteRule
? Кроме того, если бы у меня была возможность напечатать REQUEST_URI htaccess, что бы он на самом деле выводил на экран в приведенном выше примере?
PS: Я знаю, что в этом случае мне действительно не нужно использовать htaccess поскольку я могу создать папку внутри папки администратора и назвать ее магазином и так далее.Но дело в том, что у меня действительно нет папки администратора, поскольку я использую контроллеры и простой переключатель в admin.php, чтобы избежать создания миллионов папок внутри моего приложения. Для меня это просто проще.