Тщеславие URL без косой черты в Apache

Приведенный ниже код переписывает все URL-адреса в каталоге /profile / на нашем сайте с example.com/profiles/name/ в example.com/name/, но мы также хотели бы удалить завершающие косые черты, чтобы еще больше упростить результирующие URL-адреса example.com/name - так же, как в современных социальных сетях.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /profiles/$1 [NC,L]

Как это можно сделать (и сделать безопасно)? В Stumble мы видели несколько решений, которые, если объединить, возможно, сработают, но все профили на нашем сайте в настоящее время имеют свои собственные физические каталоги, а не собираются на лету скриптом.

Обновление: @ jon-lin предложил решение для аналогичной ситуации в разделе Как получить доступ к index.php каталога без завершающей косой черты И не получить перенаправление 301 - но мы не выяснили, как применить его к нашему (описано выше).

4 ответа

Решение

Добавив часть кода, предложенного @jon-lin в разделе Как получить доступ к index.php каталога без завершающей косой черты И не получить перенаправление 301 (внутренняя перезапись обратной косой черты обратно), мы фактически сделали эту работу:

# Vanity URLs

DirectorySlash Off

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /profiles/$1 [NC,L]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ /$1/

Профиль для Gucci на FASHION NET (расположен по адресу /profiles/gucci/) теперь можно получить по адресу https://www.fashion.net/gucci - без косой черты! Спасибо, @ Джон-Лин!!!!

Вы могли бы попробовать сделать

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

Который должен работать для любого URL

Вам необходимо отключить слэш каталога

Пытаться:

DirectorySlash Off

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /profiles/$1 [NC,L]

Используйте следующее перенаправление:

RewriteEngine On

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /profiles/$0 [NC,L]
Другие вопросы по тегам