htaccess将带有查询字符串的域重定向到带有排除的子域

时间:2015-04-08 18:40:11

标签: php apache .htaccess mod-rewrite redirect

我们已将网站迁移到子域,而在主域上我们有一个新网址,其中包含新网址。我们要做的是将旧网址重定向到子网域,同时排除新网址。

这里有旧网址的例子:

http://www.domain.co.il/index.php?dir=app_admin&page=ip_stat&op=list&pos=0

应重定向到:

http://sub.domain.co.il/index.php?dir=app_admin&page=ip_stat&op=list&pos=0

虽然不应影响新网站网址(不包含php)和主页。

这就是我们的htaccess的样子:

它确实将网址重定向到子网,但不排除新网页并将其重定向到子网域主页(sub.domain.com)

RewriteEngine on    
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$  http://www.%{HTTP_HOST}/$1 [R=301,L]   

RewriteCond %{REQUEST_URI} !contact(|$)
RewriteCond %{REQUEST_URI} !about(|$)
RewriteCond %{REQUEST_URI}  index\.php
RewriteRule ^(.*)$ http://sub.domain.com [R=301,L]

希望有人可以帮助我们做到这一点,我们现在在我们的gwt中获得了许多404:/

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

修复一些正则表达式并重新排序规则:

RewriteEngine on    
RewriteBase /

RewriteCond %{THE_REQUEST} !/(contact|about) [NC]
RewriteCond %{THE_REQUEST} !\.(jpe?g|gif|bmp|png|tiff|css|js) [NC]
RewriteRule ^(.+)$ http://sub.domain.com/$1 [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

还要在新浏览器中对此进行测试,以避免旧的浏览器缓存。

答案 1 :(得分:0)

这是该网站的完整代码。 设置的方式是从名为“main”的文件夹调用新站点,同时从根目录调用旧站点。 所以我们实际上有2个htaccess。

这是root htaccess代码:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^/([^.]+)\.php
RewriteRule ^(.*)$ http://sub.domain.com/$1 [L,R=301]

RewriteCond %{HTTP_HOST} www.domain.com$
RewriteCond %{REQUEST_URI} !^/main
RewriteRule ^(.*)$ /main/$1 [L]     

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

RewriteRule ^admin$ index.php?dir=app_misc&page=login [L]
RewriteRule ^admin/$ index.php?dir=app_misc&page=login [L]

RewriteRule ^sitemap.xml$ sitemap.php [L]
RewriteRule ^robots.txt$ robots.php [L]

RewriteRule ^adv$ adv/index.php [L]
RewriteRule ^adv/$ adv/index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(([0-9]+)_([^/]+)|([0-9]+))$
RewriteRule (.*) /404.php?a=%{REQUEST_URI} [L]

和“main”文件夹中的htaccess:

RewriteEngine on    
RewriteBase /

RewriteCond %{REQUEST_URI} !(contact|about) [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]

我已经在少数浏览器和隐身模式下进行过测试

由于

答案 2 :(得分:0)

而不是排除导致必要的CSS和网址的网址。 js文件也重定向,我通过创建一个仅使用php影响url的重定向来解决它。

RewriteCond %{THE_REQUEST} ([^.]+)\.php [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L,NE]