При использовании WordPress, вы не можете просто переписать URL в .htaccess
в %postname%
(реальный URL), так как WP по-прежнему смотрит на REQUEST_URI
для маршрутизации URL. Даже если вы переписываете /sale
в /discount-page/
(фактический URL), WordPress видит /sale
(запрошенный URL) - которого нет внутри WP; отсюда 404.
Хотя это и не ваше намерение, вы можете изменить это на внешнее перенаправление, чтобы обойти эту проблему (которая также позволяет избежать потенциальной проблемы с дублированным контентом). Например:
RewriteRule ^sale$ /discount-page/ [R,L]
(я удалил ?
в ^sale?$
, так как это выглядит ошибочно. Или вы действительно хотите сопоставить /sale
или /sal
?)
В качестве альтернативы, вы можете попробовать переписать с базовой "простой" постоянной ссылкой. то есть. явно передать %post_id%
. Это отличается от перезаписи на %postname%
, поскольку WP не должен проверять REQUEST_URI
для маршрутизации URL. Например:
RewriteRule ^sale$ /index.php?p=123 [L]
Где 123
- это %post_id%
вашего discount-page
. Переписав напрямую в index.php
, вы фактически обойдете фронт-контроллер WP.
Обратите внимание, что это должно идти перед стандартными директивами WordPress в .htaccess
(он же фронт-контроллер).
Тем не менее, я все еще чувствую, что должен быть более похожий на WordPress способ сделать это, поэтому я первоначально предложил задать этот вопрос в стеке WordPress . Однако, если вы это сделаете, не упоминайте «.htaccess». То, что вы действительно создаете, это псевдоним URL или что-то в этом роде. Например: У двух разных URL отображается домашняя страница