перенаправить index.php при прямом доступе

0

Я пытался настроить мой.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]

Я не уверен, что это возможно?

  • 0
    Почему это не должно быть возможно? Проблема здесь, насколько я вижу, в том, что вы не проверяете ни параметры запроса, ни проверяете, вызывался ли index.php без него.
Теги:
.htaccess
mod-rewrite

4 ответа

1
Лучший ответ

Вы должны это сделать. Проверить, нет ли какого-либо запроса, затем перенаправить на root. Это должна быть простейшая форма. Это гарантирует, что все ваши ссылки имеют строки запроса.

RewriteCond %{QUERY_STRING} !.
RewriteRule ^index\.php$ / [R=301,L]
  • 0
    Работает как шарм. Спасибо!
  • 0
    Круто без проблем.
0

Я думаю, что с 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.

0

Попробуй это:

 RewriteRule ^index\.php / [NC,QSA,L]

это должно

0

Для этого потребуется строка запроса, а запрашиваемая страница - "или" index.php. Он будет перенаправлен на a.php, если это так.

options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_FILENAME} ^(index.php|)$
RewriteRule .* a.php [R=301,L]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню