Проблема с перезаписью URL в .htaccess - PullRequest
1 голос
/ 21 января 2012

Мой .htaccess файл выглядит так:

RewriteEngine On
RewriteRule ^articles/(\d+)*$ ./articles.php?id=$1

Таким образом, если запрашивается URL foo.com/articles/123, управление передается на articles.php?id=123.

Однако, если запрошенный URL-адрес:

foo.com/articles/123/

или

foo.com/articles/123/whatever

Я получаю ответ "404 Not Found".

Я хотел бы позвонить articles.php?id=123 во всех этих случаях. Итак, если URL начинается с foo.com/articles/[digits]..., независимо от того, какие другие символы следуют за цифрами, я хотел бы выполнить articles.php?id=[digits]. (Остальная часть URL отбрасывается.)

Как мне изменить регулярное выражение, чтобы добиться этого?

Ответы [ 2 ]

2 голосов
/ 21 января 2012

Только не ищите конца:

RewriteRule ^articles/(\d+) ./articles.php?id=$1
2 голосов
/ 21 января 2012

Вам нужно разрешить трейлинг / с:

RewriteRule ^articles/(\d+)/?$

\d+ будет соответствовать только десятичным дробям. И $ будет запрещать матчи за пределами конца.

Если вам также нужны конечные идентификаторы, то вам также нужно разрешить их. Тогда может быть лучше сделать совпадение неопределенным:

RewriteRule ^articles/(.+)$

Здесь .+ соответствует практически чему-либо.

Но если вы хотите сохранить числовой идентификатор отдельно, объедините эти два параметра:

RewriteRule ^articles/(\d+)(/.*)?$   ./articles.php?id=$1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...