Как удалить множественные косые черты? - PullRequest
1 голос
/ 11 декабря 2011

Вот мои правила переписывания:

###########
# Rewrite #
###########
# Settings
RewriteEngine On
RewriteBase /
# Cache Busting
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} "^(.+)\.\d+\.(css|js)$" [NC]
RewriteRule "^.*$" "/%1.%2" [L]
# No Index
RewriteCond %{THE_REQUEST} "\ /.*index\.php.*\ " [NC]
RewriteRule "^(.*)index\..+$" "/$1" [L,NC,R=301]
# No Question Mark
RewriteCond %{THE_REQUEST} "\ /[^?]*\?\ "
RewriteRule "^(.*)$" "/$1?" [L,R=301]
# WWW
# RewriteCond %{HTTP_HOST} !"^(?:static|www)\.(.+)$" [NC]
# RewriteCond %{HTTPS}s "^on(s)|"
# RewriteRule "^(.*)$" http%2://www.%1/$1 [L,R=301]

Все работает хорошо (любое предложение улучшить производительность или улучшить регулярные выражения приветствуется, во всяком случае), но я испытываю странную ситуацию и не могу понятьесли это произведено моими правилами перезаписи или поведением Apache по умолчанию.Если мой URL заканчивается символом "/", я могу добавить столько слешей, сколько захочу, без перезаписи.

Например, если в адресной строке я вставлю следующее:

http://[MY -HOST-NAME] ////////////////////////////

Все эти слэшине удаляются.И я все еще вижу свою страницу index.php.Если я вставлю следующий адрес:

http://[MY -HOST-NAME] / members ///

Все эти множественные косые черты не удаляются, и я вижумои члены index.php страница.И так далее ...

Может кто-нибудь помочь мне, пожалуйста?Большое спасибо!

Ответы [ 4 ]

3 голосов
/ 11 декабря 2011
RewriteCond %{THE_REQUEST} //
RewriteRule .* $0 [R]
1 голос
/ 05 сентября 2018
# rule 1: remove multiple leading slashes (directly after the TLD)
RewriteCond %{THE_REQUEST} \s/{2,}
RewriteRule (.*) $1 [R=301,L]

# rule 2: remove multiple slashes in the requested path
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule (.*) %1/%2 [R=301,L]
0 голосов
/ 18 июня 2013
RewriteEngine on
RewriteBase /

#existing rule
#remove the www.
RewriteCond %{HTTP_HOST} ^www.website.co.uk$ [NC]
RewriteRule ^(.*)$ http://local.website.co.uk/$1 [R=301,L]

#new Rule
#if its not a directory
RewriteCond %{REQUEST_FILENAME} !-d
#and it has a trailing slash then redirect to URL without slash
RewriteRule ^(.+)/$ /$1 [L,R=301]

# rest of your existing rules go here
0 голосов
/ 18 июня 2013

Ответ Gerbens хорошо работает для .htaccess, но не для глобальной конфигурации.Этот удаляет все косые черты перед отправкой перенаправления.

# if match set environment variable and start over
RewriteRule ^(.*?)//+(.*)$ $1/$2 [E=REDIR:1,N]

# if done at least one. redirect with 301
RewriteCond %{ENV:REDIR} 1
RewriteRule ^/(.*) /$1 [R=301,L]
...