Чтобы предотвратить обработку каких-либо директив mod_rewrite для запросов за пределами корня документа, поместите следующее правило в начало файла:
# Предотвратить дальнейшую обработку, если запрос находится за пределами корневого каталога
Правило перезаписи / - [L]
Вышеупомянутое в основном гласит, что для любого запрошенного URL-пути, содержащего косую черту, остановитесь здесь. (Это также будет перехватывать запросы, которые заканчиваются косой чертой — это проблема?)
Кроме того, вы можете сделать регулярное выражение для существующих двух правил более конкретным, чтобы оно применялось только к запросам в корневом каталоге.
Например:
# Применять правила только к запросам в корневом каталоге
RewriteCond %{REQUEST_FILENAME} -s [ИЛИ]
RewriteCond %{REQUEST_FILENAME} -l [ИЛИ]
RewriteCond %{REQUEST_FILENAME} -d
Правило перезаписи ^[^/]+$ - [L]
Правило перезаписи ^([^/]*)$ index.php?var=$1 [QSA,L]
ПТ
флаг на первом правиле не требуется. И группа захвата в первом правиле тоже не требуется. Буквенные точки в замена строка не должна быть экранирована обратной косой чертой.
NB: это также не обработает запросы, которые конец с косой чертой.
Однако, если это ваши единственные правила, связанные с этим, то вы не необходимость два правила, требуется только одно, при условии, что запросы к самому корню документа отсутствуют вар
URL-параметр. Например:
DirectoryIndex index.php
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
Правило перезаписи ^([^/]+)$ index.php?var=$1 [QSA,L]
Отметим, что логика условия перевернуто.
Как уже упоминалось, запросы к корневому каталогу просто передаются index.php
(по mod_dir), а не index.php?var=
.