2015-03-07 11 views
0

Я пытался настроить мой .htaccess, чтобы перенаправить любой трафик, который перешел непосредственно на мой index.php без действительной строки запроса.redirect index.php при непосредственном доступе

Когда я говорю, я имею в виду в силе: /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 без. – arkascha

ответ

1

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

RewriteCond %{QUERY_STRING} !. 
RewriteRule ^index\.php$/[R=301,L] 
+0

Работает как очарование. Благодаря! – neoszion

+0

Прохладный не проблема. –

0

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

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

, что должен делать

0

Я думаю, с помощью Apache RewriteRule вы не можете соответствовать строке запроса (что происходит после того, как?)

page.html а =? 2 & b = 5

Часть? A = 2 & b = 5 не может быть сопоставлена ​​с Apache RewriteRule. Вы можете сопоставить только page.html, и у вас есть возможность включить/включить строку запроса с помощью флага QSA. В противном случае строка запроса будет проигнорирована.

RewriteRule^page.html мой-page.php [QSA]

И тогда вы можете прочитать строку запроса из PHP, используя parse_url() или просто $ _GET.

+1

Строка запроса может быть проверена, http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html. – chris85

0

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

options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteCond %{QUERY_STRING} ^$ 
RewriteCond %{REQUEST_FILENAME} ^(index.php|)$ 
RewriteRule .* a.php [R=301,L] 
Смежные вопросы