htaccess путаница в переписывании URL-адресов по поводу request_uri

Мне (иногда) каким-то образом удается успешно переписать 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, чтобы избежать создания миллионов папок внутри моего приложения. Для меня это просто проще.

6
задан Shaokan 19 November 2011 в 13:58
поделиться