Как переписать URL с% 23 в нем? - PullRequest
5 голосов
/ 13 марта 2010

У меня есть (WordPress) блог, где после комментирования пользователи перенаправляются обратно на страницу с привязкой к их комментарию. Должно выглядеть так:

http://example.org/foo-bar/#comment-570630

Но почему-то я получаю много 404 блоков журналов для таких URL-адресов:

http://example.org/foo-bar/%23comment-570630

Есть ли способ написать правило переписывания .htaccess, чтобы исправить это?

Бонусный вопрос: Есть идеи, почему это происходит и что я могу с этим поделать?

Ответы [ 2 ]

4 голосов
/ 13 марта 2010

%23 - это закодированное в URL представление #. Я подозреваю, что ваши правила перезаписи не удовлетворят %23. Вы должны исследовать, как строится ответ. В частности, любые функции кодирования URL.

Однако можно решить вашу проблему с помощью правила перезаписи. Поймите, что вы вернете клиенту два ответа после отправки комментария. Вот почему лучше исправить первый ответ.

# http://example.org/foo-bar/%23comment-570630 -> http://example.org/foo-bar/#comment-570630
RewriteCond %{REQUEST_URI} %23comment-\d+$
RewriteRule (.+)\/%23-comment(\d+)$ http://host/$1/#comment-$2 [R=301]

Это не проверено, но должно работать (я не уверен в том, что экранировать \%, поскольку это имеет особое значение в mod_rewrite)

0 голосов
/ 17 декабря 2012

Вы пробовали флаг B ?

RewriteCond %{REQUEST_URI} %23comment-\d+$
RewriteRule (.+)\/%23-comment(\d+)$ http://host/$1/#comment-$2 [B,R=301]

не проверено в вашем конкретном случае, но использовано для связанной проблемы.

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