通过重定向传递查询字符串以进行维护模式

时间:2013-07-15 11:42:40

标签: php .htaccess mod-rewrite

在使用维护模式系统时,我正在寻找一些指导,在.htaccess文件中使用,通过mod_rewrite并传递$_GET

在正常情况下,在mod_rewrite中传递$_GET对我来说完全没问题,但在这种情况下我遇到了问题..

我对维护系统的代码如下:

RewriteCond                 %{REMOTE_HOST} !^XX\.XXX\.XXX\.XXX

RewriteCond                 %{REQUEST_URI} !/maintenance.php$ 
RewriteCond                 %{REQUEST_URI} !^/css/.*$
RewriteCond                 %{REQUEST_URI} !^/assets/.*$ 
RewriteRule ^$              maintenance.php [R=302,L]

所以我需要的是能够传递$_GET以及rewriteRule,因此当任何人使用允许的IP查看网站时,我可以定义在维护模式下查看网站

当然,不在允许的IP上的人会被重定向到maintenance.php文件,无论如何都不需要这个提醒,因为页面已经这样做了。

提前感谢任何可以帮助我解决此问题的人。

EDIT ::

# Start the mod re-write conditions #

RewriteRule ^([^/]+)\/$                         ?cat=generic&page=$1 [L]
RewriteRule ^products\/([^/]+)\/([^/]+)\/$      ?cat=product&page=$2 [L]
RewriteRule ^theteam\/([^/]+)\/$                ?cat=staff&page=$1 [L]

这就是我如何处理我页面上的其他链接,我希望你能看到所有这些链接。

丹。

1 个答案:

答案 0 :(得分:1)

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !maintenance.php
RewriteCond %{REQUEST_URI} !(css|assets).*$
RewriteCond %{REMOTE_ADDR} !^XX\.XXX\.XXX\.XXX$
RewriteRule (.*) /maintenance.php [R=302,L]

RewriteCond %{REMOTE_ADDR} ^XX\.XXX\.XXX\.XXX$
RewriteRule (.*) $1?mode=maintenance [L,QSA]

这对我有用,首先你有否定重定向,所以无论谁试图在没有允许的IP的情况下访问都会转到maintenance.php。

然后你有附加内部重定向,GET mode=maintenance将不可见但会在那里。

您可以使用$_GET['mode']检索它。

如果您希望它可视地附加到查询字符串,并且只能使用php文件:

RewriteCond %{REMOTE_ADDR} ^XX\.XXX\.XXX\.XXX$
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteCond %{QUERY_STRING} !^mode=maintenance.*$
RewriteRule (.*) $1?mode=maintenance [R,L,QSA]

更新子目录的可见规则格式此规则应放在它之前:

RewriteCond %{REMOTE_ADDR} ^XX\.XXX\.XXX\.XXX$
RewriteCond %{QUERY_STRING} !.*mode=maintenance.*$
# for visible query string uncomment the below line and comment the next rule
#RewriteRule (.*) $1?mode=maintenance [R,L,QSA]
# for invisible query string
RewriteRule (.*) $1?mode=maintenance [L,QSA]

# Start the mod re-write conditions #

RewriteRule ^([^/]+)\/$                         ?cat=generic&page=$1 [L,QSA]
RewriteRule ^products\/([^/]+)\/([^/]+)\/$      ?cat=product&page=$2 [L,QSA]
RewriteRule ^theteam\/([^/]+)\/$                ?cat=staff&page=$1 [L,QSA]