# Bug Report

# Detailed description
This is a similar issue to #2329, specific to [S3 Presigned URLs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-presigned-urls.html). Using the edge router port (`:4566`), it is possible to use `generate_presigned_post`, but attempting to use the resultant URL to upload a file to localstack's S3 fails with a 404.

## Expected behavior
Localstack's edge router port should accept POST requests with an S3 Presigned URL (generated from that same Localstack instance) in the same way that the old S3 port (`:4572`) does.

## Actual behavior
While the old S3 port (`:4572`) handles this fine, the edge router responds with a 404 and a message similar to the following:

```
2020-05-24T15:36:54:INFO:localstack.services.edge: Unable to find forwarding rule for host "localhost:4566", path "/local-job-documents", target header "", auth header ""
```

(borrowed from @philippmalkov's comment on #2329 )

```
aws_1  | 2020-05-27T16:24:38:INFO:localstack.services.edge: Unable to find forwarding rule for host "aws:4566", path "/test-bucket", target header "", auth header ""
```

(our observed case with the below setup)

# Steps to reproduce

## Command used to start LocalStack
```
# Used in docker-compose.yml as:
  aws:
    image: localstack/localstack-light
    environment:
      - SERVICES=dynamodb,s3
      - HOSTNAME_EXTERNAL=aws
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
    expose:
      - 4566
      - 4572
    volumes:
      - ./.localstack:/tmp/localstack
```

## Client code (AWS SDK code snippet, or sequence of "awslocal" commands)
Client code is a Django app using `boto3` to generate a Presigned URL and then upload a file to it using `requests`, effectively identical to the examples in [the boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-presigned-urls.html)
client = aws_stack.connect_to_service('firehose', endpoint_url=edge_url)
        result = client.list_delivery_streams()
        self.assertIn('DeliveryStreamNames', result)
    def _invoke_stepfunctions_via_edge(self, edge_url):
        client = aws_stack.connect_to_service('stepfunctions', endpoint_url=edge_url)
        result = client.list_state_machines()
        self.assertIn('stateMachines', result)
    def _invoke_s3_via_edge(self, edge_url):
        client = aws_stack.connect_to_service('s3', endpoint_url=edge_url)
        bucket_name = 'edge-%s' % short_uid()
        client.create_bucket(Bucket=bucket_name)
        result = client.head_bucket(Bucket=bucket_name)
        self.assertEqual(result['ResponseMetadata']['HTTPStatusCode'], 200)
        client.delete_bucket(Bucket=bucket_name)
        bucket_name = 'edge-%s' % short_uid()
        object_name = 'testobject'
        bucket_url = '%s/%s' % (edge_url, bucket_name)
        result = requests.put(bucket_url)
        self.assertEqual(result.status_code, 200)
        result = client.head_bucket(Bucket=bucket_name)
        self.assertEqual(result['ResponseMetadata']['HTTPStatusCode'], 200)
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        result = requests.post(bucket_url, data='key=%s&file=file_content_123' % object_name, headers=headers)
        self.assertEqual(result.status_code, 204)
        result = io.BytesIO()
        client.download_fileobj(bucket_name, object_name, result)
        self.assertEqual('file_content_123', to_str(result.getvalue()))