Назад | Перейти на главную страницу

Заканчивающая косая черта .htaccess правила, приводящие к использованию полного внутреннего местоположения

Это довольно простая проблема, которую решали во всем Интернете, но я не могу найти решение своей проблемы.

Я пытаюсь установить косую черту в конце URL-адресов на моем веб-сайте с помощью этого файла .htaccess:

# Don't allow directory indexing
Options -Indexes -Multiviews

# Turn on the URL rewrite engine
RewriteEngine On

    # Add trailing slashes  
    RewriteCond    %{REQUEST_FILENAME}      -d
    RewriteRule    ^(.+[^/])$       $1/     [R]

    # send the request to [first pseudo-directory].php?p=[all the rest]

    # not a known file or directory
    RewriteCond     %{REQUEST_FILENAME}     !-f
    RewriteCond     %{REQUEST_FILENAME}     !-d

    #exclude URIs with a dot in them
    RewriteCond     %{REQUEST_URI}      !\..+$

    RewriteRule     ^(.*?)/(.*)$        $1.php?p=$2 [L,NS]

# Handle other errors
ErrorDocument 404 /errors.php?code=404
ErrorDocument 500 /errors.php?code=500

Однако, когда кто-то посещает http://domain.tld/mobile/hours (без косой черты), он перенаправляется на http://domain.tld/var/www/html/mobile/hours/ который имеет завершающую косую черту, но по необъяснимым причинам также имеет полный внутренний путь, что по очевидным причинам приводит к ошибке 404.

Конечно, правильный результат, который я ищу, это http://domain.tld/mobile/hours/

Есть подсказки?

Для потомков:

Изменение .htaccess файл под RewriteEngine On строка должна выглядеть так:

RewriteBase /

        # Add trailing slashes
        RewriteCond    %{REQUEST_FILENAME}              !-f
        RewriteCond    %{REQUEST_URI}                   !(.*)/$
        RewriteRule    ^(.*)$                           http://sub.tld.com/$1/         [L,R=301]

... видимо, проблема решена. Не уверен, что я сделал по-другому на этот раз, так как все эти изменения я вносил раньше, но теперь это работает. Я думаю, это может быть связано с явным URL-адресом и RewriteBase / правила.

Для получения дополнительной информации см. это короткое руководство.

Спасибо за помощь, я не уверен на 100%, что это исправило, но, надеюсь, эти строки могут помочь кому-то с той же проблемой.

Добавить L пометить как настоятельно рекомендуется документация лайк

RewriteRule    ^(.+[^/])$       /$1/     [R,L]

Это остановит оценку правил на этом этапе и произведет перенаправление с текущим перезаписанным URL-адресом.

Если вы опустите L следующие правила будут по-прежнему выполняться, и последующие перезаписи будут происходить с окончательной перезаписью с URL-адреса на путь файловой системы. Только тогда произойдет фактическое перенаправление с последним путем, который вы можете наблюдать в своем текущем ответе.

Попробуйте изменить это Правило:

RewriteRule    ^(.+[^/])$       $1/     [R]

Чтобы включить косую черту перед обратной ссылкой:

RewriteRule    ^(.+[^/])$       /$1/     [R]