2015-10-20 4 views
2

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

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

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

Update: @ джон-лин предложил решение аналогичной ситуации в How to access directory's index.php without a trailing slash AND not get 301 redirect - но мы не понять, как применить его к нашей (описано выше).

ответ

0

Добавляя часть кода, предложенного @ джон-лин на How to access directory's index.php without a trailing slash AND not get 301 redirect (внутренне переписывания косую черту обратно), мы фактически сделали эту работу:

# Vanity URLs 

DirectorySlash Off 

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

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

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

1

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

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

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

+0

Hey @NooBskie! Мы просто попытались, но, проверяя это на Google Chrome, 'example.com/name /' перенаправлены на URL-адрес, содержащий всю внутреннюю структуру каталогов, и 'example.com/name' для поиска Google. – haadaa

0

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

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] 
+0

Эй @ hjpotter92 - это привело к тем же ошибкам, что и к решению NooBskie. – haadaa

+0

@haadaa Попробуйте отредактированный метод^ – hjpotter92

+0

Спасибо! Это снова перенаправляется обратно в поиск Google в Chrome; в Safari и Firefox, он перенаправляет 'example.com/name' обратно на' example.com/profiles/name'. – haadaa

0

Вам нужно отключить каталог слэш

Try :

DirectorySlash Off 

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

Эй, @ Старкен! Это не сработало - 'example.com/name' теперь получил« Запрещено - у вас нет разрешения на доступ/профили/имя на этом сервере ». – haadaa