Это довольно простая проблема, которую решали во всем Интернете, но я не могу найти решение своей проблемы.
Я пытаюсь установить косую черту в конце 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]