重定向后访问旧网站



我需要做从客户端旧站点到新站点的永久重定向,重定向是从hissite.eu到newsite.com,相同的主机,但其他域。现在,他仍然想通过一些子域访问他的旧网站,如果我能让它工作的话,这不会是问题,但旧网站用自定义CMS做得很糟糕,有很多硬编码,如果我把它移到任何目录,它都不工作。

所以我的问题是,如果我从oldsite.eu到newsite.com进行永久重定向,我如何为他提供访问他的旧网站的权限?如果他键入的是ip地址而不是域,是否有可能不重定向,但我想管理面板也不会工作。有可能对除特定ip之外的所有人进行重定向吗?

使用当前htaccess进行更新:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Rewriterule ^index$                             index.php [L]
Rewriterule ^login$                             login.php [L]
Rewriterule ^register$                          register.php [L]
Rewriterule ^classified_new$                        classified_new.php [L]
Rewriterule ^account_classifieds$                   account_classifieds.php [L]
Rewriterule ^account_classifieds_manage$                account_classifieds_manage.php [L]
Rewriterule ^account_confirm$                   account_confirm.php [L]
Rewriterule ^account_details$                   account_details.php [L]
Rewriterule ^account_invoice_browse$                account_invoice_browse.php [L]
Rewriterule ^account_invoice_details$               account_invoice_details.php [L]
Rewriterule ^account_main$                      account_main.php [L]
Rewriterule ^account_messages$                  account_messages.php [L]
Rewriterule ^account_profile$                   account_profile.php [L]
Rewriterule ^ajax_request$                      ajax_request.php [L]
Rewriterule ^classified_browse$                     classified_browse.php [L]
Rewriterule ^classified_details$                    classified_details.php [L]
Rewriterule ^classified_new_form$                   classified_new_form.php [L]
Rewriterule ^classified_new_premium$                classified_new_premium.php [L]
Rewriterule ^classified_payment$                    classified_payment.php [L]
Rewriterule ^classified_new_confirmation$           classified_new_confirmation.php [L]
Rewriterule ^classified_payment_process$                classified_payment_process.php [L]
Rewriterule ^classified_payment_response$           classified_payment_response.php [L]
Rewriterule ^classifieds_json$                  classifieds_json.php [L]
Rewriterule ^convert$                           convert.php [L]
Rewriterule ^help$                          help.php [L]
Rewriterule ^login_process$                         login_process.php [L]
Rewriterule ^search_advanced$                   search_advanced.php [L]
Rewriterule ^verification_image$                    verification_image.php [L]
#search result
Rewriterule ^search/(.*)$ search_results.php?q=$1 [L]
#classified detail
Rewriterule ^classified/(.*)$ classified_details.php?id=$1 [L]
</IfModule>

可以重定向除给定IP之外的所有IP,您可以在重定向中添加一个条件,例如:

RewriteCond %{HTTP_HOST} ^(www.)?olddomain.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx$
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [R=301,L]

对于多个IP:

RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx$
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx$
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx$
RewriteCond %{HTTP_HOST} ^(www.)?olddomain.com$ [NC]
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [R=301,L]

或者,如果IP具有相同的块192.168.0.1、192.168.0.2、192.168.0.3:

RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.
RewriteCond %{HTTP_HOST} ^(www.)?olddomain.com$ [NC]
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [R=301,L]

xxx.xxx.xxx.xxx更改为您的客户端IP。

然而,这会给你带来一些问题,例如:

  1. 你的客户端可能已经缓存了重定向,所以你需要让他临时使用不同的浏览器或清除他的缓存(这并不总是有效的)。

  2. 如果你已经删除了.htaccess上可能存在的旧规则,它将无法按预期工作。

  3. 如果你的客户有动态IP,你需要在每次他试图访问它时更改它。

可能还有更多,但这是最常见的。

有可能对除特定ip之外的所有人进行重定向吗?

是的,这是完全可能的。实际上,我建议你这样做,因为它最容易使用。或者,您也可以查找特定的请求标头,以便客户可以查看旧站点或新站点并进行控制。另一种方法是使用cookie。

现在具体来说,这在一定程度上取决于您使用的具体Web服务器,但大多数Web服务器都能够处理此类配置。

例如,如果您使用基于mod_rewrite的重定向的Apache HTTPD,则可以相应地制定RewriteCond。

实现这一点的一种简单方法是通过客户端传递一个秘密查询参数:(您可以根据需要使其更加复杂)

# set a cookie only if a secret URL e.g. http://oldsite.eu?q=q1w2e3r4t5
# is passed
RewriteCond %{QUERY_STRING} (^|&)q=q1w2e3r4t5(&|$) [NC]
RewriteRule ^ - [L,CO=mredir:0:secret]
# if cookie isn't set then redirect to new website
RewriteCond %{HTTP_COOKIE} !^.*mredir=0.*$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?oldsite.eu$ [NC]
RewriteRule ^ http://newsite.com%{REQUEST_URI} [R=301,L]

编辑

看了你的.htaccess,我强烈建议你合并你的多个Rewriterule行。参见以下示例:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewriterule ^(index|login|register|help)$ $1.php [L,NC]

相关内容

  • 没有找到相关文章

最新更新