Я пытался настроить мой.htaccess для перенаправления любого трафика, который напрямую передавался мне на index.php без действительной строки запроса.
Когда я говорю "valid", я имею в виду: /index.php?page=home
Поэтому, если они перейдут непосредственно на index.php, он перенаправит на /
Вот мой.htaccess
options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([/a-zA-Z0-9_\-]+)(/|)$ /index.php?page=$1$2 [QSA,L]
Я не уверен, что это возможно?
Вы должны это сделать. Проверить, нет ли какого-либо запроса, затем перенаправить на root. Это должна быть простейшая форма. Это гарантирует, что все ваши ссылки имеют строки запроса.
RewriteCond %{QUERY_STRING} !.
RewriteRule ^index\.php$ / [R=301,L]
Я думаю, что с Apache RewriteRule вы не можете сопоставить строку запроса (что происходит после?)
page.html? а = 2 & Ь = 5
Часть? A = 2 & b = 5 не может быть сопоставлена с Apache RewriteRule. Вы можете сопоставить только page.html, и у вас есть возможность включить/включить строку запроса с помощью флага QSA. В противном случае строка запроса будет проигнорирована.
RewriteRule ^ page.html my-page.php [QSA]
А затем вы можете прочитать строку запроса из PHP, используя parse_url() или просто $ _GET.
Попробуй это:
RewriteRule ^index\.php / [NC,QSA,L]
это должно
Для этого потребуется строка запроса, а запрашиваемая страница - "или" index.php. Он будет перенаправлен на a.php, если это так.
options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_FILENAME} ^(index.php|)$
RewriteRule .* a.php [R=301,L]