The cause of this issue is one of the following:
- A misconfiguration in the dispatcher/filter section of the .any file where the dispatcher farm is defined.
- Web server has rewrite rules that are rewriting the request to an incorrect path.
The first step to debug and solve this issue is to enable debug level logging in the web server configurations. For information on how to enable debug logging refer Configuring Dispatcher.
Once debug logging is enabled, search for a line with "Filter rejects {request-line}". Here {request-line} is the request method and the url that is incorrectly returning 404. See the log messages below for an example of the request GET /libs/wcm/core/content/siteadmin.infinity.json HTTP/1.1:
cache-action for [/libs/wcm/core/content/siteadmin.infinity.json]: NONE [Tue Oct 16 13:47:18 2012] [D] [2880(1532)] connected to render publishl (127.0.0.1:4502) [Tue Oct 16 13:47:18 2012] [D] [2880(1332)] Filter rejects GET /libs/wcm/core/content/siteadmin.infinity.json HTl
If there is such a line, but the URL path has been modified ("rewritten") by the web server then see section II below. However, if the URL path matches what you expected to be sent to the publish instance then the /filter configuration of dispatcher farm is incorrect. For information on how to fix it, refer the article Troubleshoot Dispatcher flushing issues.
If the URL path being used by dispatcher is modified to a non-existent path, then it is likely caused by a bad rewrite rule configured in the web server. Review your web server rewrite rules, and find the respective documentation. Then, to find the rule that is unexpectedly changing the URL path review the rewrite rules.