我正在处理托管在Tomcat服务器上的Java Web应用程序.我必须设置从www到非www和从http到https的重定向.我想要以下三个网址:
重定向到
为此,我使用UrlRewriteFiltertuckey.org的4.0.3版.这是我的urlrewrite.xml档案:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
<rule>
<name>Redirect www to non-www and http to https</name>
<condition type="request-url" operator="equal">(^http://example.com|^http://www.example.com|^https://www.example.com)</condition>
<from>^(.*)$</from>
<to type="permanent-redirect" last="true">https://example.com$1</to>
</rule>
</urlrewrite>
Run Code Online (Sandbox Code Playgroud)
重定向工作但网站没有加载,浏览器显示消息:
这个页面不起作用
example.com重定向了你太多次了.
我使用了重定向检查器,发现在初次重定向到https://example.com/之后,另一个重定向到https://example.com/,然后是另一个,依此类推 - 该URL重定向到自身.我不明白是什么产生了这种无限循环.任何帮助,将不胜感激!
更新:我还没有解决方案.如果我从条件元素中删除第一个URL,则其他两个重定向工作正常,但问题是如何从http://example.com设置重定向.
我尝试了另一种方法 - 通过粘贴以下代码在web.xml文件中设置重定向到https:
<security-constraint>
<web-resource-collection>
<web-resource-name>all</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Run Code Online (Sandbox Code Playgroud)
结果是相同的 - https://example.com在无限循环中重定向到自身.在这种情况下唯一的区别是重定向是状态代码302.任何关于导致此问题的原因以及如何解决它的想法?
更新:这是使用时curl命令的输出UrlRewriteFilter:
运行结果: curl http://example.com
HTTP/1.1 301 Moved …Run Code Online (Sandbox Code Playgroud) 我想实现一个可排序的DBgrid(在单击列标题时对其行进行排序).我设法按升序排序,但我不能按降序排列.这是我的设计设置:
Query1.DatabaseName:='Test';
DataSetProvider1.DataSet:=Query1;
ClientDataSet1.ProviderName:=DataSetProvider1;
DataSource1.DataSet:=ClientDataSet1;
DBGrid1.DatSource:=DataSource1;
Run Code Online (Sandbox Code Playgroud)
以下是我的代码片段:
procedure TForm2.FormShow(Sender: TObject);
begin
Query1.Open;
ClientDataSet1.Data:=DataSetProvider1.Data;
ClientDataSet1.AddIndex('objnameDESC','objname',[ixDescending]);
ClientDataSet1.AddIndex('SUM(cd.worktime)DESC','SUM(cd.worktime)',[ixDescending]);
end;
procedure TForm2.DBGrid1TitleClick(Column: TColumn);
begin
case Column.Index of
0: if ClientDataSet1.IndexFieldNames='objname' then
ClientDataSet1.IndexFieldNames:='objnameDESC'
else
ClientDataSet1.IndexFieldNames:='objname';
1: if ClientDataSet1.IndexFieldNames='SUM(cd.worktime)' then
ClientDataSet1.IndexFieldNames:='SUM(cd.worktime)DESC'
else
ClientDataSet1.IndexFieldNames:='SUM(cd.worktime)';
end;
end;
Run Code Online (Sandbox Code Playgroud)
当我第一次点击列标题时,排序按升序完成 - 所以到此为止一切正常.当我第二次点击时,我希望按降序排序,但我收到消息:
Project ... raised Exception class EDatabaseError with message
'ClientDataSet1: Field 'objnameDESC' not found'.
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的任何想法?
我的问题是如何使用TBookmark对象进行加法和减法等操作.例如,假设我想在dbgrid中高出4行:
MyPoint:=Query1.GetBookmark;
...
//MyPoint:=MyPoint-4;
Query1.GotoBookmark(MyPoint);
Run Code Online (Sandbox Code Playgroud)
这里的注释行是错误的.它生成"不适用于此操作数类型的运算符"消息.问题是我应该用什么来代替注释行.提前致谢!