RewriteRule из .htaccess, с косой чертой в конце - PullRequest
2 голосов
/ 15 июля 2011

У меня есть два вида ссылок на моем сайте: первый заканчивается на .html, а второй - на / (с косой чертой, если имя файла не заканчивается на .html).

Причиной некоторых правил перезаписи, в случае, если файл не является .html, и если он добавлен / в конце, URL переписан неправильно.

как:

Все в порядке со ссылкой: http://mysite.com/cars/fast-cars

Но не в порядке со ссылкой: http://mysite.com/cars/fast-cars/

Итак, мне нужно, чтобы URL заканчивался /, а не (.html/), для перенаправления на ту же страницу, без /, или в этом случае:

http://mysite.com/cars/fast-cars/ для перенаправления на http://mysite.com/cars/fast-cars.

Надеюсь, я был ясен, и вы можете помочь мне с этим правилом htaccess. Заранее спасибо.

ОБНОВЛЕНО: Я нашел часть решения здесь: .htaccess с косой чертой или без нее .

но моё правило не должно быть допустимым для некоторых подкаталогов (например, для администратора каталогов, заказов и т. Д.). это можно определить также с тем же правилом?

ОБНОВЛЕНИЕ 2: У меня есть такие правила, как:

RewriteRule ^cars/fast-cars$ /seopage.php?marker=fast-cars$1

Также попробовал с правилом, которое работает:

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

Но это правило должно быть обойдено для некоторых каталогов (т. Е. Администратора, заказов и т. Д.).

1 Ответ

5 голосов
/ 15 июля 2011

Вы можете сделать это несколькими способами (выберите наиболее подходящий для вас).

1) Удалите косую черту / для несуществующих файлов и папок:

# remove trailing slash for non-existing files and folders
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]

2) Удалить косую черту / с исключениями

# remove trailing slash except some folders
RewriteCond %{REQUEST_URI} !^/(admin|orders)
RewriteRule ^(.*)/$ $1 [L,R=301]

3) Вы даже можете объединить это вместе (что может быть слишком много):

RewriteCond %{REQUEST_URI} !^/(admin|orders)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]

Также рассмотрите возможность добавленияэта директива где-то вверху - документация :

DirectorySlash Off
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...