我们已将网站迁移到子域,而在主域上我们有一个新网址,其中包含新网址。我们要做的是将旧网址重定向到子网域,同时排除新网址。
这里有旧网址的例子:
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:/
感谢您的帮助!
答案 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]