Нужно ли избегать косой черты при использовании mod_rewrite? - PullRequest
20 голосов
/ 28 августа 2010

Что касается косой черты "/" при задании регулярного выражения для RewriteRule, RewriteCond или чего-либо еще, связанного, в частности, с .htaccess, необходимо ли экранировать косую черту?

Вот пример того, чего я пытаюсь достичь

RewriteEngine on
RewriteOptions inherit

RewriteBase /uk-m-directory/
RewriteRule ^(region|region\/|regions\/)$ regions [R=301,L]
RewriteRule ^(county|county\/|counties\/)$ counties [R=301,L]
RewriteRule ^(city|city\/|cities\/)$ cities [R=301,L]

Вышеописанное работает нормально, и продолжает работать, когда я удаляю обратную косую черту, как показано ниже

RewriteEngine on
RewriteOptions inherit

RewriteBase /uk-m-directory/
RewriteRule ^(region|region/|regions/)$ regions [R=301,L]
RewriteRule ^(county|county/|counties/)$ counties [R=301,L]
RewriteRule ^(city|city/|cities/)$ cities [R=301,L]

Какой правильный путь? Они оба не правы? Есть ли какая-то особая причина, по которой передний слеш должен быть экранирован или нет?

Я предполагаю, что косую черту не нужно экранировать, потому что, насколько я знаю, это не специальный символ. Но я просто хочу быть уверен.

В случае, если вам интересен смысл этого кода, он перенаправляет город, округ и регион (с косой чертой или без нее) на их множественные эквиваленты. Кроме того, если множественное число имеет косую черту, оно удаляет косую черту.

1 Ответ

19 голосов
/ 28 августа 2010

Нет, вам не нужно избегать слешей. Прямые косые черты не имеют никакого особого значения в регулярных выражениях.

Один общий символ, который меня укусил в прошлом, - ? в строках запроса. Того, кому ты должен сбежать.

...