我正在尝试为我的网页的所有链接制作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正在显示?是否有特殊规则来检测您何时按下链接?
提前致谢!
答案 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]