Включение кодированных символов URL в регулярное выражение для файла .htaccess - PullRequest
0 голосов
/ 26 июня 2018

Мне нужно включить кодированные символы URL в регулярное выражение для моего файла .htaccess для специальных символов на разных языках.

У меня есть следующее, которое включает пробелы %20:

RewriteRule ^search/([0-9a-zA-Z\s-]+)/?$ search.php?search=$1 [L,NC,QSA]

Но мне нужно иметь возможность включать такие символы, как õ, что %C3%B5.

В основном мне нужно включить любой кодированный в URL символ с символом %.

Любая помощь или помощь с этим будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы можете использовать [^\/] класс отрицанных символов :

^search/([^\/]+)/?$

Это соответствует

  • ^ - начало строки
  • search/ - буквальная подстрока
  • ([^\/]+) - Захват группы 1 (сопоставляемое содержимое упоминается с помощью $1): любые 1+ символов, кроме /
  • /? - опционально /
  • $ - конец строки.
0 голосов
/ 26 июня 2018

Вы можете использовать этот код в корне своего сайта .htaccess:

Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^search/([^/]+)/?$ search.php?search=$1 [L,NC,QSA]
  • Вам необходимо отключить опцию MultiViews, поскольку ваше php имя файла совпадает с начальным компонентом URI. Параметр MultiViews (см. http://httpd.apache.org/docs/2.4/content-negotiation.html) используется Apache's content negotiation module, который запускает до mod_rewrite и заставляет сервер Apache сопоставлять расширения файлов. Поэтому, если /search является URL-адресом, Apache будет служить /search.php.
  • RewriteCond необходимо, чтобы убедиться, что вы не соответствует каталог с именем search/ в корневом каталоге вашего сайта.
...