Вы должны поменять два правила:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}
# => Put your specific rule here !
RewriteRule ^main/(.*)$ /main.php?tag=$1 [L,NC]
# The remaining route, acting as a "catch-all"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# I'm not really sure the purpose of your next condition, but I suspect it's useless. See comment.
#RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system|sayfalar|main\.php)
RewriteRule ^(.*)$ /index.php?/$1 [L]
DirectoryIndex home.php
</IfModule>
Просто чтобы напомнить вам, [L] означает, что это правило должно применяться последним, если оно соответствует.
Итак, когда вы сделали RewriteRule ^(.*)$ /index.php?/$1 [L]
, вы сказали Apache сопоставить любой URL и переписать его в свой индекс, а не искать дальнейшие правила. Отсюда твоя проблема.
Таким образом, основной вывод заключается в том, чтобы переписать в конце индекс (чтобы он действовал как "универсальный") и добавить конкретный маршрут раньше.