Используя htaccess, как переписать параметры длиной более 8 символов? - PullRequest
1 голос
/ 22 мая 2019

Используя файл .htaccess, я пытаюсь переписать URL, если длина «папки» составляет 8 или более символов.Другими словами:

https://example.com/blog - идет в папку /blog

- но -

https://example.com/12345678 - идет к https://example.com/script.php?id=12345678

В идеале, ответ должен гарантировать, что https://example.com/12345678/ все еще работает (обратите внимание на косую черту /).

Это для сервера Linux, работающего по плану общего хостинга - подумайте Hostgator, GoDaddy и т. Д.

Это так неправильно, но:

RewriteRule ^(.*)$ [>8character]? "script.phpid=$1" ? "";

1 Ответ

4 голосов
/ 22 мая 2019

Как насчет:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/script.php.*$
RewriteRule ^([^\/]{8,})[^\/]*$ "/script.php?id=$1" [R,L]
  • Использование RewriteCond в качестве дополнительной защиты от цикла перенаправления

По умолчанию исходная строка запроса отбрасывается при добавлении новойпоэтому, если вы хотите сохранить оригинал (например, example.com/12345678?utm_campaign=foo переходит на example.com/script.php?id=12345678&utm_campaign=foo), используйте флаг [ QSA ], например:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/script.php.*$
RewriteRule ^([^\/]{8,})[^\/]*$ "/script.php?id=$1" [QSA,R,L]

Если идентификаторвсегда просто числа, вы можете изменить регулярное выражение на ^(\d{8,})[^\/]*$, чтобы сделать его более надежным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...