В регулярном выражении .htaccess необходимо указывать косую черту - PullRequest
7 голосов
/ 03 февраля 2010

Мне нужно включить дополнительный трейлинг-слэш, это /, в мой RewriteRule

То, что у меня есть, это

RewriteRule ^([a-zA-Z0-9]+)$ u.php?$1|$2

Работает нормально, например, http://foo.bar/abcde будет перенаправлять на http://foo.bar/u.php?abcde и обрабатывать любые параметры строки запроса, которые могут присутствовать.

Что мне нужно сделать, это взять http://foo.bar/abcde/ (с завершающим слешем) и перенаправить на http://foo.bar/u.php?abcde

Так что, если он присутствует, мне нужно удалить последний слеш из $ 1 в моем RewriteRule. Как мне это сделать? Я новичок в Apache и пробовал много разных правил регулярных выражений, но не могу понять это правильно.

1 Ответ

19 голосов
/ 03 февраля 2010

Просто поставьте /? перед $ в конце вашего паттерна:

RewriteRule ^([a-zA-Z0-9]+)/?$ u.php?$1

Но я бы лучше предложил вам разрешить только одно правописание (с косой чертой или без нее) и перенаправить другое:

# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/$ /$1 [L,R=301]
# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ /$0/ [L,R=301]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...