Перенаправить все в index.php и преобразовать структуру папок в строку запроса - PullRequest
0 голосов
/ 13 сентября 2018

Я хотел бы использовать HTACCESS, чтобы гарантировать, что единственный файл, который можно вызвать, это index.php, то есть:

http://example.com is OK
http://example.com/?parm=val is OK
http://example.com/index.php is OK
http://example.com/index.php?parm=val is OK

Перезапись должна произойти, если:

http://example.com/notexistfile.php --> index.php
http://example.com/notexistfile.php?parm=val --> index.php (ignore parm)
http://example.com/existfile.php --> index.php
http://example.com/existfile.php?parm=val --> index.php (ignore parm)
http://example.com/notexistfold/ --> index.php?f=notexistfold
http://example.com/notexistfold/?parm=val --> index.php?f=notexistfold (ignore parm)
http://example.com/existfold/ --> index.php?f=existfold
http://example.com/existfold/?parm=val --> index.php?f=existfold (ignore parm)

На практике

  1. любой запрос к существующим или не существующим файлам PHP должен быть перенаправлен в обычный файл index.php, даже если у них есть строка запроса. Разрешены только строки запроса, связанные с index.php.

  2. Любой запрос к существующей папке НЕ должен переходить к просмотру каталога, но должен быть перенаправлен в index.php плюс строка запроса, в которой папка преобразуется в параметр

  3. Любой запрос к несуществующей папке должен быть перенаправлен в index.php плюс строка запроса, где папка преобразуется в параметр

Я попробовал следующее, но оно не работает. Если папка существует, меня переводят в каталог.

RewriteEngine On
# Redirect any request to not existing files or folders
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php [NC,L,QSA]
# Redirect folder structure to query string
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^\/([^\/]+)\/?  /?f=$1 [NC,L]

Что я делаю не так?

...