直接访问时重定向index.php

时间:2015-03-07 20:43:08

标签: php apache .htaccess mod-rewrite

我正在尝试设置我的.htaccess来重定向任何直接转到我的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]

我不确定它可能吗?

4 个答案:

答案 0 :(得分:1)

你应该能够做到这一点。检查是否有任何查询,然后重定向到root。那应该是最简单的形式。这提供了所有链接都有查询字符串。

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

答案 1 :(得分:0)

试试这个:

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

应该做

答案 2 :(得分:0)

我认为使用Apache RewriteRule你不能匹配查询字符串(接下来会发生什么?)

page.html中一个= 2&安培; B = 5

部分?a = 2& b = 5无法与Apache RewriteRule匹配。您只能匹配page.html,并且可以选择使用QSA标志包含/启用查询字符串。否则,将忽略查询字符串。

RewriteRule ^ page.html my-page.php [QSA]

然后你可以使用parse_url()或只需$ _GET从PHP读取查询字符串。

答案 3 :(得分:0)

这将需要一个查询字符串,并且所请求的页面是''或'index.php'。如果是这种情况,它将重定向到a.php。

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