не работает перезапись маски через htaccess - PullRequest
0 голосов
/ 29 октября 2018

Не уверен, что это правильный раздел Stackoverflow, чтобы задать мой вопрос ...

Но вот оно:

Итак, я использую ниже для .htaccess файла:

RewriteEngine On
RewriteRule ^sale?$ /discount-page/

Так что, когда люди посещают страницу example.com/sale, они видят контент с example.com/discount-page/

Но когда я захожу на example.com/sale, появляется сообщение об ошибке 404 о том, что URL /discount-page недоступен на этом сервере ...

Почему это происходит?

Вот как выглядит весь мой файл .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 31 октября 2018

При использовании 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 отображается домашняя страница

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