Тщеславие 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]