### Apache Airflow version

Other Airflow 2 version (please specify below)

### What happened

on 2.5.3:

log url is https://airflow.hostname.de/log?execution_date=2023-06-19T04%3A00%3A00%2B00%3A00&task_id=task_name&dag_id=dag_name&map_index=-1

this url works when I am logged in.
If I am logged out, the login screen will redirect me to https://airflow.hostname.de/log?execution_date=2023-06-19T04%3A00%3A00+00%3A00&task_id=task_name&dag_id=dag_name&map_index=-1 which shows me an empty log.
the redirect seems to convert the `%2B` back to a `+` in the timezone component of the execution_date, while leaving all other escaped characters untouched.

### What you think should happen instead

log url works correctly after login redirect

### How to reproduce

https://airflow.hostname.de/log?execution_date=2023-06-19T04%3A00%3A00%2B00%3A00&task_id=task_name&dag_id=dag_name&map_index=-1

have a log url with a execution date using a timezone with a positive utc offset

### Operating System

linux

### Versions of Apache Airflow Providers

_No response_

### Deployment

Official Apache Airflow Helm Chart

### Deployment details

_No response_

### Anything else

_No response_

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

_all_db_reqs: set[str] = set()
    for provider in ALL_DB_PROVIDERS:
        if provider not in PROVIDER_DEPENDENCIES:
            continue
        for req in PROVIDER_DEPENDENCIES[provider][DEPS]:
            _all_db_reqs.add(req)
    return list(_all_db_reqs)
all_dbs = get_all_db_dependencies()
EXTRAS_DEPENDENCIES["all_dbs"] = all_dbs
_all_dependencies = get_unique_dependency_list(EXTRAS_DEPENDENCIES.values())
_all_dependencies_without_airflow_providers = list(
    filter(lambda k: "apache-airflow-" not in k, _all_dependencies)
)
EXTRAS_DEPENDENCIES["all"] = _all_dependencies_without_airflow_providers
devel_all = get_unique_dependency_list(
    [_all_dependencies_without_airflow_providers, doc, doc_gen, devel, devel_hadoop]
)
PACKAGES_EXCLUDED_FOR_ALL: list[str] = []
def is_package_excluded(package: str, exclusion_list: list[str]) -> bool:
    """
    Checks if package should be excluded.
    :param package: package name (beginning of it)
    :param exclusion_list: list of excluded packages
    :return: true if package should be excluded
    """
    return any(package.startswith(excluded_package) for excluded_package in exclusion_list)
def remove_provider_limits(package: str) -> str: