[^/]\.php(/|$)
[^/]
- начало строки НЕ начинается со / ( тут коллега был не прав это именно отрицание символа)\.php
- экранирование точки то есть точка это как точка а не любой символ. ТО есть .php должно быть в урле (/|$)
-или или вертикальная черта разделитель соответственно оканчивается или на / или просто без него./.php/
[^/].+\.php(/|$)
.+
- Как минимум 1 знак или символ там должен быть[^/].+\.php&
- тут будет соответствие тольок x.php что на мой взгляд более правильно. du -sh *
du -sh * | grep G
# Ensure that Apache listens on port 80
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example1.com
# Other directives here
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example2.org
# Other directives here
</VirtualHost>
############################################################################
#### Убираем слеши в конце URL для статических файлов (содержит точку) ####
############################################################################
RewriteCond %{REQUEST_URI} \..+$
# Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d
# И это не директория.
RewriteCond %{REQUEST_FILENAME} -f
# Является файлом.
RewriteCond %{REQUEST_URI} ^(.+)/$
# И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]
# Исключить слеш.
############################################################################
#### Добавляем слеш(/), если его нет, и это не файл. ####
############################################################################
RewriteCond %{REQUEST_URI} !(.*)/$
# Если слеша в конце нет.
RewriteCond %{REQUEST_FILENAME} !-f
# Не является файлом.
RewriteCond %{REQUEST_URI} !\..+$
# В URL нет точки (файл).
RewriteRule ^(.*)$ $1/ [L,R=301]
# Добавляем слеш в конце.
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
# если это не директория
RewriteCond %{REQUEST_FILENAME} !-f
# и если это не файл
RewriteCond %{REQUEST_URI} (.+)\.html$
# И если в урле есть
RewriteRule ^(.*)$ http://site.ru/%1 [R=301,L]
#то выполняется условие в котором $ мы вообще не испльзуем а используем % то же самое толоко из RewriteCond ( то что в скобочках предидущего правила. И так Правило говорит что пофиггу какой урл мы берем что было в скобках в предидущем правиле и все.
RewriteRule . /index.php [L]