如何重定向外部请求?

时间:2015-05-08 11:46:37

标签: php apache .htaccess mod-rewrite redirect

我想使用.htaccess文件配置Apache,以便外部网页的任何请求都应重定向到splash.html,但内部请求不应重定向,例如:

如果我在www.test.com,并且点击了导致www.mysite.com的链接,则应该重定向到www.mysite.com/splash.html,但是如果我从www.mysite.com请求wwww.mysite/com/products它应该带我去www.mysite.com/index.php

3 个答案:

答案 0 :(得分:1)

你可以写下你的.htaccess:

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http(s)?://([^.]+\.)*mysite\.com [NC]
    RewriteRule ^(.*)?$ /splash.html [R,NC]

请注意,您可能来自您网站下的任何子域名,但如果您想将其限制为只有一个域名,那么:

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !www.mysite.com [NC]
    RewriteRule ^(.*)?$ /splash.html [R,NC]

您可以测试here

UPDATE1:

注意:我假设您使用的是Linux,如果您使用的是Windows,请先查看我的评论结尾。

我建议您通过执行以下操作在localhost上隔离项目:

1-将项目置于特定路径中,假设在/ var / www / test /中,该路径包含.htaccess

2-通过创建/etc/apache/sites-enabled/mysite.conf创建Apache虚拟主机,包含以下内容:

   <VirtualHost *:80>
     ServerName mysite.com
     ServerAlias www.mysite.com
     DocumentRoot /var/www/test
     <Directory /var/www/test>
       DirectoryIndex index.php
       AllowOverride All
       Order deny,allow
       Allow from all
     </Directory>
   </VirtualHost>

3-将此行添加到/ etc / hosts结尾:

    127.0.0.1 www.mysite.com mysite.com

4-重启Apache

根据以上所述,您可以使用以下URL运行本地代码:

    mysite.com 
    www.mysite.com

在本地做任何你想要的测试而不影响你在

下运行的其他项目
    localhost

我通过创建简单的html页面来测试上述逻辑http://localhost/test.html包含指向mysite.com/test.html的超链接

注意: 如果您使用的是Windows,则可以执行以下替换:

/var/www/ => Apache root of your local server
/etc/hosts => c:\Windows\System32\Drivers\etc\hosts
/etc/apache/sites-enabled => virtual hosts of your local server

UPDATE2:

如果您不喜欢上面的虚拟主机内容

1-在apache根目录上创建文件夹,我们将其命名为“mysite”

2-里面的mysite把这个.htaccess

      RewriteEngine on
      RewriteCond %{HTTP_REFERER} !^$
      RewriteCond %{HTTP_REFERER} ^http(s)?://localhost/mysite/ [NC]
      RewriteRule ^(.*)?$ /splash.html [R,NC]

3-您可以使用此代码

在“mysite”文件夹之外使用test.html测试重定向
    <a href="http://localhost/mysite/test.html">test</a>

4-您可以使用test.html在“mysite”文件夹中使用此代码

测试内部页面是否正常工作
    <a href="http://localhost/mysite/test.html">test</a>

答案 1 :(得分:0)

您需要的是与HTTP_REFERER的值匹配的mod_rewrite条件。像这样的东西(从头顶 - 可能需要一些调整):

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !www.mysite.com [NC]
RewriteRule ^\/?(\.html)?$ /splash.html [R,NC]

http://httpd.apache.org/docs/2.2/rewrite/access.html

答案 2 :(得分:0)

在/.htaccess文件中尝试此操作

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://www\.mysite\.com [NC]
RewriteRule ^.* /splash.html [R,NC,L]
 RewriteRule ^products/?$ /index.php [R,L,NC]