我在安装了 centos 的 vps 服务器上运行 tomcat 服务器。我的网站使用 mydomain.com 和 www.mydomain.com 进行浏览。但我不想在我的网址中看到 www。即,如果我使用 www.mydomain.com 进行浏览,它应该被重定向到 mydomain.com。
为此,我在我的 context.xml 中添加了 Rewrite 阀门,还在 /opt/apache/conf/Catalina/mydomain.com 中创建了 rewrite.config 文件,并添加了以下重写规则
RewriteCond %{HTTP_HOST} ^www.mydomain.com [NC]
重写规则 ^(.*)$ mydomain.com/$1 [L,R=301]
但它不起作用。当我使用 www.mydomain.com 浏览时,网址保持不变。它没有重定向到 mydomain.com
请指出我哪里做错了。
答案1
首先,您的重写规则有一个小错误。它应该使用完整的 URL 进行重定向(参见描述重定向旗帜):
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com$1 [L,R=301]
但是这并不能解释为什么重写规则没有被触发。如上面的评论所述,您必须确保文件rewrite.config
位于写入位置。使用默认server.xml
配置(引擎名称Catalina
,主机名localhost
),您需要将其放入:
$CATALINA_BASE/conf/Catalina/localhost
如果你将添加到你的元素RewriteValve
中。<Host>
server.xml
- 您的应用程序的文件
WEB-INF
夹,如果您将其添加到了应用程序的元素RewriteValve
中。<Context>
无论如何,它可能会帮助您提高 Servlet 记录器的日志级别:
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE
,$CATALINA_BASE/conf/logging.properties
它将记录到localhost.<date>.log
以下行:
Read configuration from: ...
Add rule with pattern ^(.*)$ and substitution http://example.com$1
Add condition ^www.example.com test %{HTTP_HOST} to rule with pattern ^(.*)$ and substitution http://example.com$1 [NC]
只要RewriteValve
正确配置即可。