Я пытался удалить ЛЮБЫЕ / ВСЕ дефисы и подчеркивания _ из входящего запроса URL на мой сервер nginx.
Чтобы было ясно, когда кто-то вводит URL-адрес следующим образом:
https://www.example.com/my-name_is-tom
... Мне нужно, чтобы nginx перепишите URL следующим образом:
https://www.example.com/mynameistom
Я работаю со следующей конфигурацией:
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name top.example.com;
ssl_certificate /etc/ssl/top.example.com.crt;
ssl_certificate_key /etc/ssl/top.example.com.key;
# set the root
root /srv/top.exemple.com;
index index.html;
location ~ ^/([a-zA-Z0-9=\?\_\-]+)$ {
rewrite ^(/.*)-(.*)$ $1$2 last;
rewrite ^(/.*)_(.*)$ $1$2 last;
rewrite ^/(.*)$ / break;
}
location / {
ssi on;
}
# BOSH
location /http-bind {
proxy_pass http://localhost:0000/http-bind;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
}
... однако я не вижу, чтобы переписывание происходило.
Может, я неправильно переписал это местоположение?
Может мне нужно как-то переписать X-Forward-For $ remote_addr; ???
Любые идеи / предложения будут ОЧЕНЬ благодарны - я просто не очень разбираюсь в nginx и regexp.
Заранее благодарю вас за ваше время и внимание.
EDIT / PS. Похоже, мне нужно какое-то правило, которое удаляет не буквенно-цифровые символы из $ request_uri. Итак, это:
example.com/my-name-is-tom.html
будет визуально переписано в поле URL-адреса браузера на:
example.com/mynameistomhtml
Я понимаю, насколько полностью странно это звучит, но ... вот что должно произойти.
Любое дальнейшее понимание будет чрезвычайно признательно. ТЫ!
Для изменения URL, отображаемого в адресном поле браузера клиента, необходим внешний редирект :
rewrite ^(.*)[-_](.*)$ $1$2 permanent;
Если, например, необходимо ограничить область перезаписи, чтобы /http-bind/
был не переписан, можно сделать регенерацию более конкретной:
rewrite ^(/[^/]*)[-_]([^/]*)$ $1$2 permanent;
Пояснение: захват и совпадение ведущего косая черты, за которым следуют нулевые или более не косая черта. Подходит дефис или подчеркивание. Захват и совпадение нуля и более не косых символов.
Оба перезаписанных текста будут повторно перенаправляться с ответом HTTP 301 до тех пор, пока не будут удалены все символы [-_]
.
Поместите перезапись
перед первым блоком местоположения
.
Если вы поместили перезапись
внутри блока местоположения
, убедитесь, что местоположение соответствует диапазону URI, которые предполагается перезаписать при перезаписи. Однако правило перезаписи уже достаточно специфично, поэтому наличие блока местоположения является довольно избыточным.
См. настоящий документ для более подробной информации.