tkmorgan
6 months ago
10
0
Lumen

404 Errors when posting to webroot

Posted 6 months ago by tkmorgan

I am working with Laravel Lumen on iis 8.5 and I had a problem with routes intermittently giving 404 errors. It would work just fine for a while, and then start giving 404 errors. Sometimes, running composer update would cause the next request to work correctly, but the one after that would fail. Eventually, the 404 errors seemed to stop, but only after I changed some of the routes in my routes/web.php. This is for a site that is not at the webroot (I.E., "/" is actually "/path/to/my/lumen/install/"), and below is a snippet from the web.php. I noticed that when I changed the '/' in the second route to '/addTask', everything started working again, but I don't trust it, since that seems too much like a "magical solution".

So, my question is, have any of you ever seen routing weirdness with Laravel or Lumen?

My (old) routes/web.php

$router->post(
    '/tasks-submitted',
    'UpdatePriceMasterCont[email protected]'
);

$router->post('/', 
 '[email protected]'
);

My Controller

(Or a heavily trimmed version of it)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use ReallySimpleJWT\Token;

class UpdatePriceMasterController extends Controller
{
...
    public function getTasksSubmitted(Request $request)
    {
    return 'Success!';
    }

    public function addTaskToQueue(Request $request)
    {
       return "Success!";
    }
}

My web.config:

<!--
    Rewrites requires Microsoft URL Rewrite Module for IIS
    Download: https://www.microsoft.com/en-us/download/details.aspx?id=47337
    Debug Help: https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules
-->
<configuration>
    <system.net>
        <settings>
            <webProxyScript downloadTimeout="01:00:00" />
        </settings>
    </system.net>
    <system.transactions>
        <defaultSettings timeout="01:00:00" />
    </system.transactions>
    <system.web>
        <httpRuntime executionTimeout="3600" />
    </system.web>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Imported Rule 1" stopProcessing="true">
          <match url="^(.*)/$" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
          </conditions>
          <action type="Redirect" redirectType="Permanent" url="/{R:1}" />
        </rule>
        <rule name="Imported Rule 2" stopProcessing="true">
          <match url="^" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.php" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>```

Please sign in or create an account to participate in this conversation.