我正在使用 WebSphere Application Server 上的 SAML2 配置 Web SSO,并将 PingFederate 作为 IDP。
我所做的是,
我可以看到SAML响应从IDP发送到WebSphere并且服务器发送了成功的响应,但我无法弄清楚为什么不能将用户重定向到目标URL。我已将调试级别设置为精细,找不到任何错误。此外,错误URL也不起作用。
在我添加“
我想知道我是否犯了一些错误或错过了一些导致此问题的配置。
此外,我上传了跟踪日志的一部分,该部分应该是它从IDP接收SAML响应的部分。
[21-9-21 15:38:53:460 EDT] 000000d9 EJSWebCollabo > preInvoke Entry
[21-9-21 15:38:53:460 EDT] 000000d9 EJSWebCollabo < preInvoke Exit
<null>
[21-9-21 15:38:53:460 EDT] 000000d9 EJSWebCollabo > preInvoke Entry
com.ibm.ws.webcontainer.srt.SRTServletRequest@99083b5f
com.ibm.ws.webcontainer.srt.SRTServletResponse@f46dafbe
samlsps
default_host
IBMWebSphereSamlACSListenerServlet
true
[21-9-21 15:38:53:461 EDT] 000000d9 EJSWebCollabo 3 Http Header names and values:
Host=[localhost:9443]
Connection=[keep-alive]
Content-Length=[3361]
Cache-Control=[max-age=0]
sec-ch-ua=["Google Chrome";v="93", " Not;A Brand";v="99", "Chromium";v="93"]
sec-ch-ua-mobile=[?0]
sec-ch-ua-platform=["Windows"]
Upgrade-Insecure-Requests=[1]
Origin=[https://localhost:9031]
Content-Type=[application/x-www-form-urlencoded]
User-Agent=[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36]
Accept=[text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9]
Sec-Fetch-Site=[same-site]
Sec-Fetch-Mode=[navigate]
Sec-Fetch-Dest=[document]
Referer=[https://localhost:9031/]
Accept-Encoding=[gzip, deflate, br]
Accept-Language=[en-US,en;q=0.9,zh-TW;q=0.8,zh;q=0.7,zh-CN;q=0.6]
Cookie=[PF=slGINjz4m5kSL7gpbfdUlA]
[21-9-21 15:38:53:461 EDT] 000000d9 EJSWebCollabo 3 Request Context Path=/samlsps, Servlet Path=, Path Info=/acs
[21-9-21 15:38:53:461 EDT] 000000d9 WebSecurityCo > <init> Entry
<null>
<null>
<null>
[21-9-21 15:38:53:461 EDT] 000000d9 WebSecurityCo < <init> Exit
com.ibm.ws.security.web.WebSecurityContext@936c75b7
[21-9-21 15:38:53:461 EDT] 000000d9 WebCollaborat > SetUnauthenticatedSubjectIfNeeded Entry
[21-9-21 15:38:53:461 EDT] 000000d9 WebCollaborat 3 Invoked and received Subject are null, setting it anonymous/unauthenticated.
[21-9-21 15:38:53:461 EDT] 000000d9 WebCollaborat < SetUnauthenticatedSubjectIfNeeded:true Exit
[21-9-21 15:38:53:461 EDT] 000000d9 WebCollaborat 3 com.ibm.ws.security.web.WebCollaborator.WebComponentMetaData attribute is set.
[21-9-21 15:38:53:461 EDT] 000000d9 EJSWebCollabo 3 WebComponentMetaData
com.ibm.ws.webcontainer.metadata.WebComponentMetaDataImpl@476b7334[WebSphereSamlSP#WebSphereSamlSPWeb.war#IBMWebSphereSamlACSListenerServlet]
[21-9-21 15:38:53:461 EDT] 000000d9 EJSWebCollabo 3 preInvoke pushing app name WebSphereSamlSP
[21-9-21 15:38:53:461 EDT] 000000d9 WebSecurityCo 3 Setting pushed security to "true" for: com.ibm.ws.security.web.WebSecurityContext@936c75b7
[21-9-21 15:38:53:461 EDT] 000000d9 EJSWebCollabo 3 preInvoke
app_name=WebSphereSamlSP isAdminApp=false isAppSecurityOn=false
[21-9-21 15:38:53:461 EDT] 000000d9 EJSWebCollabo 3 preInvoke
Skip authorization for non-system apps when app security is disabled.
[21-9-21 15:38:53:461 EDT] 000000d9 IBMWebSphereS > handleRedirect Entry
[21-9-21 15:38:53:464 EDT] 000000d9 IBMWebSphereS 3 samlres[not null]
[21-9-21 15:38:53:464 EDT] 000000d9 IBMWebSphereS 3 target[null]
[21-9-21 15:38:53:464 EDT] 000000d9 IBMWebSphereS 3 RelayState[null]
[21-9-21 15:38:53:464 EDT] 000000d9 IBMWebSphereS > getTarget(relayStateUri[null],decodeURL[true] Entry
[21-9-21 15:38:53:464 EDT] 000000d9 IBMWebSphereS 3 The RelayState is not a URL. target URL.
[21-9-21 15:38:53:467 EDT] 000000d9 IBMWebSphereS < handleRedirect Exit
[21-9-21 15:38:53:467 EDT] 000000d9 EJSWebCollabo > postInvoke Entry
com.ibm.ws.security.web.WebSecurityContext@936c75b7
[21-9-21 15:38:53:467 EDT] 000000d9 EJSWebCollabo 3 Resetting invoked: null and received: nullsubjects
[21-9-21 15:38:53:468 EDT] 000000d9 WebSecurityCo 3 Getting pushed security value "true" for: com.ibm.ws.security.web.WebSecurityContext@936c75b7
[21-9-21 15:38:53:468 EDT] 000000d9 EJSWebCollabo 3 postInvoke popped resource WebSphereSamlSP of type Application
[21-9-21 15:38:53:468 EDT] 000000d9 EJSWebCollabo < postInvoke Exit
[21-9-21 15:38:53:468 EDT] 000000d9 EJSWebCollabo > postInvoke Entry
<null>
[21-9-21 15:38:53:468 EDT] 000000d9 EJSWebCollabo < postInvoke Exit
启用应用程序安全后,我将被重定向到login.errorUrl。在日志中,我可以看到WebSphere收到了SAML响应,但不知何故它无法处理它。我想我已经在WebSphere上上传了签名者证书,并将“trustAnysigner”设置为“true”。以下是日志的一些部分:
[21-9-22 15:05:07:971 EDT] 000000c0 ACSTrustAssoc 3 Sending redirect
[21-9-22 15:05:07:972 EDT] 000000c0 ACSTrustAssoc < createTAIErrorResult Exit
[21-9-22 15:05:07:972 EDT] 000000c0 ACSTrustAssoc 3 SAMLResponse could not be verified. Auto Re-login.
[21-9-22 15:05:07:972 EDT] 000000c0 ACSTrustAssoc < invokeTAIbeforeSSO:null Exit
[21-9-22 15:05:07:972 EDT] 000000c0 ACSTrustAssoc < negotiateValidateandEstablishTrust returns [not null] Exit
[21-9-22 15:05:07:972 EDT] 000000c0 TAIWrapper < negotiateAndValidateEstablishedTrust(): status code = 403 Exit
[21-9-22 15:05:07:972 EDT] 000000c0 WebAuthentica < Exiting with TAI_CHALLENGE Exit
[21-9-22 15:05:07:972 EDT] 000000c0 WebAuthentica 3 result status is 5
[21-9-22 15:05:07:972 EDT] 000000c0 WebAuthentica < authenticate Exit
AuthenticationResult.TAI_CHALLENGE
[21-9-22 15:05:07:972 EDT] 000000c0 WebCollaborat 3 isAuthenticate is false
[21-9-22 15:05:07:972 EDT] 000000c0 WebRequestImp > getAppVHost Entry
[21-9-22 15:05:07:972 EDT] 000000c0 WebRequestImp < getAppVHost Exit
appVHost=default_host
isVHostAndContextRootSet=true
[21-9-22 15:05:07:972 EDT] 000000c0 WebCollaborat > validSecAttrs Entry
default_host:samlsps
/acs
POST
false
WebSphereSamlSP
com.ibm.ws.webcontainer.srt.SRTServletRequest@5ae9cdc7
default_host
false
[21-9-22 15:05:07:972 EDT] 000000c0 WebAppCache > getWebAccessContext Entry
WebSphereSamlSP
default_host:samlsps
false
[21-9-22 15:05:07:972 EDT] 000000c0 WebAppCache 3 Okay, I found the entry for [WebSphereSamlSP:default_host:samlsps]
[21-9-22 15:05:07:972 EDT] 000000c0 WebAppCache < getWebAccessContext Exit
[21-9-22 15:05:07:973 EDT] 000000c0 WebAccessCont > WebAccessContext with ServletMap Entry
[21-9-22 15:05:07:973 EDT] 000000c0 WebAccessCont < WebAccessContext with ServletMap Exit
[21-9-22 15:05:07:973 EDT] 000000c0 WebConstraint > getConstraints: Entry
/acs
POST
[21-9-22 15:05:07:973 EDT] 000000c0 WebConstraint 3 webConstraintsTable.length = 1
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo > isStandardHTTPMethod Entry
POST
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo < isStandardHTTPMethod Exit
true
[21-9-22 15:05:07:973 EDT] 000000c0 WebConstraint 3 Looking at webResourceCollectionConstraints with URL patterns:
[21-9-22 15:05:07:973 EDT] 000000c0 WebConstraint 3 url: /*
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo > matches Entry
/acs
POST
true
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 .... check if in http methods list
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[0]: GET
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[1]: PUT
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[2]: HEAD
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[3]: TRACE
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[4]: POST
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 methodName is in methodList, returning true
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo > isStandardHTTPMethod Entry
POST
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo < isStandardHTTPMethod Exit
true
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 .... check if in http omission methods list
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 methodName is not in methodList, returning false
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 -- Checking methods --
validateAllMethods: false existMethodsList :true memberOfMethodList :true isStandardHTTPMethod :true allowCustomHTTPMethods :true
existOmissionMethodsList :false memberOfOmissionMethodList :false
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 .... check if in http methods list
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[0]: GET
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[1]: PUT
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[2]: HEAD
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[3]: TRACE
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 memberOfList, methodName: POST methodList[4]: POST
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 methodName is in methodList, returning true
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo 3 Checking URL: /*
[21-9-22 15:05:07:973 EDT] 000000c0 WebResourceCo < matches (PathName) : /* Exit
[21-9-22 15:05:07:973 EDT] 000000c0 WebConstraint < getConstraints not null Exit
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat > unprotectedSpecialURI Entry
webAppName[WebSphereSamlSPWeb]
isProtected[true]
realm[Default Realm]
challengeType[BASIC]
authMechanism[LTPA]
SSLEnabled[false]
SSOEnabled[true]
secureSSO[false]
defaultToBasic[false]
LTPACookieName[LtpaToken]
loginCookieName[null]
CookieSuffix[null]
/acs
POST
REQUEST
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat < unprotectedSpecialURI Exit
<null>
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat < validSecAttrs Exit
<null>
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat 3 List of required roles for uri /acs is:
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat 3 required role: WebSphereSamlAcsRole
[21-9-22 15:05:07:973 EDT] 000000c0 WebRequestImp > getAppContextRoot Entry
[21-9-22 15:05:07:973 EDT] 000000c0 WebRequestImp < getAppContextRoot Exit
appContextRoot=samlsps
isVHostAndContextRootSet=true
[21-9-22 15:05:07:973 EDT] 000000c0 WebRequestImp > getAppVHost Entry
[21-9-22 15:05:07:973 EDT] 000000c0 WebRequestImp < getAppVHost Exit
appVHost=default_host
isVHostAndContextRootSet=true
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat > isURIBoundByConstraint Entry
WebSphereSamlSP
samlsps
default_host
/acs
[21-9-22 15:05:07:973 EDT] 000000c0 WebAppCache > getWebAccessContext Entry
WebSphereSamlSP
default_host:samlsps
false
[21-9-22 15:05:07:973 EDT] 000000c0 WebAppCache 3 Okay, I found the entry for [WebSphereSamlSP:default_host:samlsps]
[21-9-22 15:05:07:973 EDT] 000000c0 WebAppCache < getWebAccessContext Exit
[21-9-22 15:05:07:973 EDT] 000000c0 WebAccessCont > WebAccessContext with ServletMap Entry
[21-9-22 15:05:07:973 EDT] 000000c0 WebAccessCont < WebAccessContext with ServletMap Exit
[21-9-22 15:05:07:973 EDT] 000000c0 WebConstraint > existsExactMatchURI Entry
/acs
[21-9-22 15:05:07:973 EDT] 000000c0 WebConstraint 3 webConstraintsTable.length = 1
[21-9-22 15:05:07:973 EDT] 000000c0 WebConstraint < existsExactMatchURI : no match, returning false Exit
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat < isURIBoundByConstraint Exit
false
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat 3 isURIBound for uri: /acs: false
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat 3 securityConstraints for uri /acs are: com.ibm.ws.security.web.WebResourceCollectionConstraints@393f3b2b
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat 3 URI - /acs.POST is protected
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat 3 Saving previous subject null
[21-9-22 15:05:07:973 EDT] 000000c0 WebCollaborat > checkAuthStatus Entry
AuthenticationResult.TAI_CHALLENGE
webAppName[WebSphereSamlSPWeb]
isProtected[true]
realm[Default Realm]
challengeType[BASIC]
authMechanism[LTPA]
SSLEnabled[false]
SSOEnabled[true]
secureSSO[false]
defaultToBasic[false]
LTPACookieName[LtpaToken]
loginCookieName[null]
CookieSuffix[null]
[21-9-22 15:05:07:974 EDT] 000000c0 TAIChallengeR > TAIChallengeReply(403) Entry
[21-9-22 15:05:07:974 EDT] 000000c0 TAIChallengeR < TAIChallengeReply() Exit
[21-9-22 15:05:07:974 EDT] 000000c0 WebCollaborat 3 TAI authentication challenge - sending 403
[21-9-22 15:05:07:974 EDT] 000000c0 WebCollaborat < checkAuthStatus 3 Exit
com.ibm.ws.security.web.TAIChallengeReply@54049520
[21-9-22 15:05:07:974 EDT] 000000c0 WebCollaborat < authorize Exit
com.ibm.ws.security.web.TAIChallengeReply@54049520
[21-9-22 15:05:07:974 EDT] 000000c0 EJSWebCollabo > handleException Entry
com.ibm.ws.webcontainer.srt.SRTServletRequest@5ae9cdc7
com.ibm.ws.webcontainer.srt.SRTServletResponse@25d3a5e1
com.ibm.ws.security.web.WebSecurityException
at com.ibm.ws.security.web.EJSWebCollaborator.preInvoke(EJSWebCollaborator.java:451)
at com.ibm.ws.webcontainer.collaborator.WebAppSecurityCollaboratorImpl.preInvoke(WebAppSecurityCollaboratorImpl.java:230)
at com.ibm.wsspi.webcontainer.collaborator.CollaboratorHelper.preInvokeCollaborators(CollaboratorHelper.java:436)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1101)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4219)
at com.ibm.ws.webcontainer.webapp.WebAppImpl.handleRequest(WebAppImpl.java:2210)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1030)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:382)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:532)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:318)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:289)
at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:1187)
at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.readyInboundPostHandshake(SSLConnectionLink.java:768)
at com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyHandshakeCompletedCallback.complete(SSLConnectionLink.java:464)
at com.ibm.ws.ssl.channel.impl.SSLUtils.handleHandshake(SSLUtils.java:1137)
at com.ibm.ws.ssl.channel.impl.SSLHandshakeIOCallback.complete(SSLHandshakeIOCallback.java:87)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1909)
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo 3 Response is already committed
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo 3 com.ibm.websphere.security.allow.committed.response is false
[21-9-22 15:05:07:976 EDT] 000000c0 WebSecurityCo 3 Getting pushed security value "true" for: com.ibm.ws.security.web.WebSecurityContext@9d8e0360
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo 3 handleException popped resource WebSphereSamlSP of type Application
[21-9-22 15:05:07:976 EDT] 000000c0 WebSecurityCo 3 Getting pushed admin value "false" for: com.ibm.ws.security.web.WebSecurityContext@9d8e0360
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo < handleException Exit
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo > postInvoke Entry
com.ibm.ws.security.web.WebSecurityContext@9d8e0360
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo 3 Resetting invoked: null and received: nullsubjects
[21-9-22 15:05:07:976 EDT] 000000c0 WebSecurityCo 3 Getting pushed security value "true" for: com.ibm.ws.security.web.WebSecurityContext@9d8e0360
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo 3 postInvoke popped null resource
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo < postInvoke Exit
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo > postInvoke Entry
<null>
[21-9-22 15:05:07:976 EDT] 000000c0 EJSWebCollabo < postInvoke Exit
在was端如何配置目标URL?有三种不同的方法可以确定其目标URL。按优先级顺序排列:
以下跟踪规范将显示有关如何确定 targetUrl 的详细信息:
=info:com.ibm.ws.security.web.=all:com.ibm.ws.security.saml.=all:com.ibm.websphere.wssecurity.=all:com.ibm.ws.wssecurity.=all:com.ibm.ws.wssecurity.platform.audit.=关闭
如果你有这个规范的痕迹,请随意上传到这里,我也很乐意看一看。
另外,作为补充说明,如果可能的话,我建议更新到最新的WAS fixpack。对SAML运行时进行了一些日志记录改进,可能对这种情况有所帮助。
我已经构建了一个RESTendpoint,它使用Spring和Apache CXF2.5来使用和生成Application/JSON。 配置: 当我使用不受支持的内容类型(如application/xml)发送请求(使用REST客户端应用程序)时,我会得到一个内部服务器错误。我希望是405,因为endpoint不支持任何其他内容类型。为什么我会得到这个例外?
我是新的角度6。我用spring boot开发了一个post服务,当我通过postman测试它时,它工作得很好,但当我用web浏览器测试它时,它给了我这个错误: HttpErrorResponse ;{headers:HttpHeaders,status:500,statusText:“ok”,URL:“http://localhost:8080/api/test/ordermiss”,ok:fa
我用wordpress和woocommerce(www.jescesole.eu)建立了一个网站。由于该网站在德国销售,我不得不在最近几天安装一个附加插件,woocommerce germanized(与polylang一起,以德语和意大利语查看内容),我升级了wp和所有插件,但当客户提交订单时,会出现一条内部服务器错误消息。我阅读了服务器错误日志,并报告了一条很长的错误消息: 周四,13四月20
[root@SudeepMangubin]#./cassandra-f XSS =-ea-Java agent:/home/苏迪普/Apache-Cassandra-1 . 2 . 5-src/lib/jamm-0 . 2 . 5 . jar-XX:UseThreadPriorities-XX:ThreadPriorityPolicy = 42-xms 930m-xmx 930m-xmn 200m
本文向大家介绍在Windows的Apache服务器上配置对PHP和CGI的支持,包括了在Windows的Apache服务器上配置对PHP和CGI的支持的使用技巧和注意事项,需要的朋友参考一下 现在有越来越多的个人主页站长需要了解如何如何在windows系统下配置自己的php,cgi服务器,以方便本地调试cgi和php的程序。 我们可以用Apache(windows版)来一次搞定:以下由我自己整