Скрыть index.php и .php из URL при использовании QUERY_STRING - PullRequest
0 голосов
/ 23 декабря 2010

Я хотел бы иметь возможность скрывать как index.php, так и .php из моих URL-адресов при использовании QUERY_STRING.

В данный момент я успешно скрываю index.php (за исключением доступа к определенным каталогам).со следующим в моем .htaccess:

RewriteEngine On
RewriteCond $1 !^(codex|_core|admin|index\.php) [NC]
RewriteRule ^(.*)$ /index.php?/$1 [L]

Я делаю это, потому что у меня есть определенные функции, такие как вход в систему / выход из системы / регистрация, выступающие в качестве страниц: example.com/login

Тем не менее, у меня также есть некоторые статические страницы, которые не выиграют от того, что они находятся внутри одного файла с набором функций PHP ... например, example.com/terms-and-conditions.php

В духечтобы быть унифицированным, как мне превратить этот URL в example.com/terms-and-conditions, не нарушая example.com/login?Это вообще возможно?Я пытался добавить перезапись удаления .php о перезаписи удаления index.php (очевидно, удаляя .php из index.php) безрезультатно.

Я пытался использовать решение, расположенное здесь но это сломало example.com/login - я так полагаю, потому что я использую функции / запросы.Есть ли что-то маленькое, что мне нужно изменить?

1 Ответ

0 голосов
/ 23 декабря 2010

Разобрался!Просто нужно объединить два, что кажется очевидным в ретроспективе.:)

RewriteEngine On

# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{HTTP_HOST} ^www\.domain\.com
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

RewriteCond $1 !^(codex|_core|admin|index\.php) [NC]
RewriteRule ^(.*)$ /index.php?/$1 [L] 

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
...