Удалите завершающие косые черты

Я бы хотел работать со страницами без косой черты в конце. Итак, теперь я хочу, чтобы мой URL-адрес с завершающей косой чертой перенаправлял (с использованием .htaccess) на тот же URL-адрес без конечной косой черты.

У меня есть два файла .htaccess:

<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteRule (.*)  public/$1
</IfModule>

И один в моей общей папке:

DirectoryIndex index.html index.php
Options -Indexes

<IfModule mod_rewrite.c>
    RewriteEngine On        
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f         
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>

Я попытался добавить следующее правило в файл .htaccess в общей папке:

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

Но тогда: example.com/public/page/view/2/

Перенаправляет на: example.com/**D:/webserver/**public/page/view/2

Это явно не то, что я хочу ...


person Erik    schedule 30.06.2009    source источник
comment
Я не уверен, как решить вашу проблему, но я не уверен, что вам действительно следует это делать. Насколько я понимаю, запрос такого URL-адреса: example.com/myDir фактически перенаправляет пользователя на example.com/myDir. Этого дополнительного перенаправления можно избежать с помощью завершающей косой черты. Эта косая черта однозначно указывает на то, что myDir - это каталог, а не файл.   -  person nikmd23    schedule 30.06.2009
comment
Вы хотите сказать, что завершающая косая черта является частью некоторых формальных / стандартных / стандартных обозначений. В таком случае у меня есть аналогичный вопрос. Как я могу перенаправить, чтобы добавить завершающую косую черту ;-)   -  person Erik    schedule 30.06.2009
comment
Поскольку вы на самом деле не пытаетесь перенаправить в каталог, конечная косая черта вам совсем не помогает - фактически, она ничего не делает в той или иной форме. Вы должны просто следовать тому, что вам нравится, и быть последовательным в использовании   -  person Fake51    schedule 04.07.2009


Ответы (4)


Почему у вас несколько файлов .htaccess? Где хранятся перенаправления на общедоступные / $ 1? Вы вполне можете столкнуться с переопределяющими директивами RewriteRule, которые усложняют для вас ситуацию.

Не зная вашей настройки, довольно сложно сказать, как вы должны использовать перезапись - можете ли вы указать, как это ДЕЙСТВИТЕЛЬНО выглядит?

person Fake51    schedule 04.07.2009
comment
Я свел все это к одному файлу .htaccess. При отладке я понял, что некоторые браузеры автоматически добавляли завершающую косую черту из-за некоторой истории посещенных страниц. Очистка моей истории в Интернете, добавление rewritecond и rewriterule сделали свое дело. - person Erik; 12.07.2009

Wordpress перенаправляет в зависимости от вашей структуры постоянных ссылок. Таким образом, любые изменения в .htaccess мало помогают, поскольку Wordpress добавит / удалит их за вас и выполнит wp_redirect () после того, как .htaccess сделает что-то. В худшем случае вы получите цикл перенаправления.

Решение - отключить перенаправление Wordpress с помощью.

// perhaps an if(is_something()) before here ...
add_filter('redirect_canonical', '__return_false');

Вы должны заключить это в оператор if или что-то в этом роде, где вы выполняете проверку определенной страницы / каталога / и т. Д. Помещение вышеуказанного прямо в ваш файл функций отключит перенаправление WordPress и, вероятно, сломает работу.

person swedish boy    schedule 26.11.2015

Вы пробовали добавить:

RewriteBase /public

в файл .htaccess в общей папке, чтобы получить:

<IfModule mod_rewrite.c>
    RewriteEngine On            
    RewriteBase /public

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

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f         
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
person Daniel James    schedule 30.06.2009
comment
Вы имеете в виду, что он перенаправляет без этой строки, но не перенаправляет с ней? Кроме того, из вашего вопроса неясно, где вы поместили свое «RewriteRule (. *) / $ 1 [R, L]» в файл «.htaccess». - person Daniel James; 30.06.2009
comment
С вашим кодом я получаю следующие результаты: example.com/page/view/1 ›› Ошибка 404 example.com/page/view/1/ ›› Перенаправляет на example.com/public/page/view/1, а затем отображает сообщение 404 - person Erik; 30.06.2009

Вот пример из документации Apache, который вы можете использовать для решения своей проблемы:

Проблема с конечной косой чертой

Описание:

Каждый веб-мастер может спеть песню о проблеме с косой чертой в конце URL-адресов, ссылающихся на каталоги. Если они отсутствуют, сервер выдает сообщение об ошибке, потому что если вы скажете / ~ quux / foo вместо / ~ quux / foo /, тогда сервер будет искать файл с именем foo. И поскольку этот файл является каталогом, он жалуется. На самом деле в большинстве случаев он пытается исправить это сам, но иногда вам нужно эмулировать этот механизм. Например, после того, как вы выполнили множество сложных переписываний URL-адресов в сценарии CGI и т. Д.

Решение:

Решение этой тонкой проблемы состоит в том, чтобы позволить серверу автоматически добавлять завершающую косую черту. Чтобы сделать это правильно, мы должны использовать внешнее перенаправление, чтобы браузер правильно запрашивал последующие изображения и т. Д. Если бы мы выполняли только внутреннюю перезапись, это работало бы только для страницы каталога, но могло бы пойти не так, когда на эту страницу были бы включены какие-либо изображения. с относительными URL-адресами, потому что браузер запросит встроенный объект. Например, запрос image.gif в /~quux/foo/index.html без внешнего перенаправления станет /~quux/image.gif!

Итак, чтобы проделать этот трюк, мы пишем:

RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo$  foo/  [R]

Сумасшедшие и ленивые могут даже сделать следующее в файле верхнего уровня .htaccess своего домашнего каталога. Но обратите внимание, что это создает некоторые накладные расходы на обработку.

RewriteEngine  on
RewriteBase    /~quux/
RewriteCond    %{REQUEST_FILENAME}  -d
RewriteRule    ^(.+[^/])$ $1/ [R]

Источник

person Ion Br.    schedule 04.07.2009