如何使用.htaccess隐藏IP?

时间:2016-12-01 15:30:09

标签: apache .htaccess redirect mod-rewrite ubuntu-16.04

我正在尝试为我的网页的所有链接制作RewriteRule,但我无法让它工作。我希望我在网页上按下的所有链接都像:

domain.es
domain.es/section1
domain.es/section2
domain.es/section3/subsection1

等等。

如果我直接浏览浏览器上的domain.es,它可以正常工作(我还有一些规则可以重定向索引也不会显示)但是如果我按下我网页的任何链接,网址就是显示如下:1.1.1.1/section1,我的意思是,它显示的是带有IP而不是域的网址。

此外,如果我也直接访问浏览器上的domain.es/section1我没有任何问题,网址上会显示任何IP。正确显示网址,使用域而不是IP。

这是我目前拥有的.htaccess文件:

IndexIgnore *

Options +FollowSymlinks
Options -Indexes

RewriteEngine On

RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]


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

我不知道问题是否可能,但我正在使用Joomla。还要注意它是一个虚假的IP,而不是1.1.1.1我在我的项目中拥有真正的IP。

为什么我直接在浏览器上使用我的网址,他们没有显示IP,如果我按下我的网页的链接,IP正在显示?是否有特殊规则来检测您何时按下链接?

提前致谢!

1 个答案:

答案 0 :(得分:0)

CBroe是正确的,显示IP地址是由于某些代码/配置问题与显示的mod_rewrite规则无关。

但是,将IP重定向到主机名的最后一条规则是不正确的,因为HTTP_HOST仅匹配没有方案,端口,URI等的主机名。

您可以使用:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^1\.1\.1\.1$
RewriteCond %{SERVER_PORT} =8082
RewriteRule ^proyect(/.*)?$ http://domain.es%{REQUEST_URI} [R=301,L,NC,NE]

# remaining Joomla rules

RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^ index.php [F]

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

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