diff --git a/pooch/core.py b/pooch/core.py
index aa8ab13..06d3362 100644
--- a/pooch/core.py
+++ b/pooch/core.py
@@ -295,8 +295,8 @@ def create(
         Base URL for the remote data source. All requests will be made relative
         to this URL. The string should have a ``{version}`` formatting mark in
         it. We will call ``.format(version=version)`` on this string. If the
-        URL is a directory path, it must end in a ``'/'`` because we will not
-        include it.
+        URL does not end in a ``'/'``, a trailing ``'/'`` will be added
+        automatically.
     version : str or None
         The version string for your project. Should be PEP440 compatible. If
         None is given, will not attempt to format *base_url* and no subfolder
@@ -423,6 +423,8 @@ def create(
     path = cache_location(path, env, version)
     if isinstance(allow_updates, str):
         allow_updates = os.environ.get(allow_updates, "true").lower() != "false"
+    # add trailing "/"
+    base_url = base_url.rstrip("/") + "/"
     pup = Pooch(
         path=path,
         base_url=base_url,

diff --git a/pooch/tests/test_core.py b/pooch/tests/test_core.py
index c1b1702..0a46aea 100644
--- a/pooch/tests/test_core.py
+++ b/pooch/tests/test_core.py
@@ -382,6 +382,15 @@ def test_pooch_update_disallowed_environment():
         os.environ.pop(variable_name)
 
 
+def test_pooch_create_base_url_no_trailing_slash():
+    """
+    Test if pooch.create appends a trailing slash to the base url if missing
+    """
+    base_url = "https://mybase.url"
+    pup = create(base_url=base_url, registry=None, path=DATA_DIR)
+    assert pup.base_url == base_url + "/"
+
+
 @pytest.mark.network
 def test_pooch_corrupted(data_dir_mirror):
     "Raise an exception if the file hash doesn't match the registry"

Automatically add a trailing "/" to base_url in pooch.create
**Description of the problem:**

In order to define a `Pooch` with a DOI, the DOI needs to end on a `/`. However, that character is not part of the DOI (e.g. https://dx.doi.org/ does not understand the DOI with `/`) and should not be needed here. The root of the problem is very likely a too similar handling of URLs and DOIs.


**Full code that generated the error**

Using the example from [the official docs](https://www.fatiando.org/pooch/latest/protocols.html#digital-object-identifiers-dois) and stripping the trailing `/` from `base_url`:
```python
POOCH = pooch.create(
    path=pooch.os_cache("plumbus"),
    # Use the figshare DOI
    base_url="doi:10.6084/m9.figshare.14763051.v1",
    registry={
        "tiny-data.txt": "md5:70e2afd3fd7e336ae478b1e740a5f08e",
        "store.zip": "md5:7008231125631739b64720d1526619ae",
    },
)

def fetch_tiny_data():
    """
    Load the tiny data as a numpy array.
    """
    fname = POOCH.fetch("tiny-data.txt")
    data = numpy.loadtxt(fname)
    return data
```


**Full error message**

```
ValueError: Archive with doi:10.6084/m9.figshare.14763051.v1tiny-data.txt not found (see https://doi.org/10.6084/m9.figshare.14763051.v1tiny-data.txt). Is the DOI correct?
```
pooch/tests/test_core.py::test_pooch_create_base_url_no_trailing_slash
pooch/tests/test_core.py::test_retrieve pooch/tests/test_core.py::test_retrieve_fname pooch/tests/test_core.py::test_retrieve_default_path pooch/tests/test_core.py::test_pooch_local pooch/tests/test_core.py::test_pooch_custom_url[https] pooch/tests/test_core.py::test_pooch_custom_url[figshare] pooch/tests/test_core.py::test_pooch_custom_url[zenodo] pooch/tests/test_core.py::test_pooch_custom_url[dataverse] pooch/tests/test_core.py::test_pooch_download[https] pooch/tests/test_core.py::test_pooch_download[figshare] pooch/tests/test_core.py::test_pooch_download[zenodo] pooch/tests/test_core.py::test_pooch_download[dataverse] pooch/tests/test_core.py::test_pooch_download_retry_off_by_default pooch/tests/test_core.py::test_pooch_download_retry pooch/tests/test_core.py::test_pooch_download_retry_fails_eventually pooch/tests/test_core.py::test_pooch_logging_level pooch/tests/test_core.py::test_pooch_update pooch/tests/test_core.py::test_pooch_update_disallowed pooch/tests/test_core.py::test_pooch_update_disallowed_environment pooch/tests/test_core.py::test_pooch_corrupted pooch/tests/test_core.py::test_pooch_file_not_in_registry pooch/tests/test_core.py::test_pooch_load_registry pooch/tests/test_core.py::test_pooch_load_registry_comments pooch/tests/test_core.py::test_pooch_load_registry_fileobj pooch/tests/test_core.py::test_pooch_load_registry_custom_url pooch/tests/test_core.py::test_pooch_load_registry_invalid_line pooch/tests/test_core.py::test_pooch_load_registry_with_spaces pooch/tests/test_core.py::test_check_availability pooch/tests/test_core.py::test_check_availability_invalid_downloader pooch/tests/test_core.py::test_fetch_with_downloader pooch/tests/test_core.py::test_invalid_hash_alg pooch/tests/test_core.py::test_alternative_hashing_algorithms pooch/tests/test_core.py::test_download_action pooch/tests/test_core.py::test_stream_download[tiny-data.txt] pooch/tests/test_core.py::test_stream_download[subdir/tiny-data.txt] pooch/tests/test_core.py::test_load_registry_from_doi[figshare] pooch/tests/test_core.py::test_load_registry_from_doi[zenodo] pooch/tests/test_core.py::test_load_registry_from_doi[dataverse] pooch/tests/test_core.py::test_load_registry_from_doi_zenodo_with_slash pooch/tests/test_core.py::test_wrong_load_registry_from_doi