Ваше правило перезаписи не имеет смысла, так как RewriteRule
не работает напрямую со строкой запроса (значит - это не часть URL) - оно работает только с частью пути URL (например, в /foo/bar?baz=bop
pathчасть будет /foo/bar
).Чтобы соответствовать строке запроса, вы должны использовать RewriteCond
.
. В вашем случае вам не нужно даже этого делать ... поскольку вы не "полностью модифицируете / изменяете" существующий запросстрока .. просто добавив немного к нему.
Попробуйте этот код:
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^(?!index\.php)(.*)$ index.php?sub=$1 [QSA,L]
1.QSA
говорит mod_rewrite добавить текущую строку запроса к новой.
2.Это правило исключает запросы к файлу index.php
для предотвращения бесконечного цикла перенаправления.
EDIT:
3.Это правило (а также ваша собственная попытка) перезапишет запросы на любой URL, включая любые существующие файлы (например, изображения, CSS и т. Д.).Чтобы обойти это «ограничение» (я написал это на вашем примере), добавьте эти строки непосредственно перед строкой RewriteRule:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d