我想使用.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
答案 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]
答案 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]