htaccess заставляет URL отвечать из /index.json, а также / - PullRequest
1 голос
/ 18 февраля 2020

У меня есть сайт Wordpress, который отвечает JSON на каждый запрос, то есть следующие страницы:

/ 
/about
/about/team

Все отвечают json. Файл htaccess выглядит следующим образом:

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

Я хотел бы сохранить то, что у меня есть сейчас, но также отвечает теми же данными, когда к URL добавляется index.json:

/index.json 
/about/index.json
/about/team/index.json

Как я могу обновить свой htaccess, чтобы так же отвечать на эти URL?

1 Ответ

1 голос
/ 19 февраля 2020

Исходя из того, что @MrWhite сказал в комментариях (собираюсь процитировать здесь, потому что комментарии могут быть удалены позже),

Однако «проблема» здесь - WordPress. WP направляет URL-адреса на основе REQUEST_URI, который не изменяется при перезаписи URL-адреса. Так что вам действительно нужно реализовать это в самом WordPress.

Вы, вероятно, просто «сбросите» значение $_SERVER['REQUEST_URI'] в PHP, если оно заканчивается на /index.json. (Относительно легкая работа со строками / заданием регулярных выражений.)

Оставшаяся проблема заключается в том, чтобы просто найти «правильный» способ сделать это - я думаю, пытаясь сделать это с помощью любых хуков внутри функций темы. php или плагин, может быть слишком поздно. Вы можете попробовать в любом случае, если хотите - порядок крючков, как описано здесь, это то, что я бы go, https://wordpress.stackexchange.com/a/162869
Крюк init довольно далеко вниз, даже после определения текущего пользователя, et c. - но, возможно, plugins_loaded или setup_theme могут подойти для подобных вещей.

Если это не сработает, все же есть несколько возможных альтернатив:

  • Если вы может повлиять на конфигурацию PHP, auto_prepend_file позволит вам указать скрипт, который будет автоматически запускаться раньше, чем что-либо еще PHP, чтобы вы могли зафиксировать значение перед индексом. php code даже выполняется.

  • Вы можете написать свой собственный маленький файл-оболочку, скажем, index2.php, который фиксирует значение, а затем просто включает исходный index.php впоследствии. Единственная проблема в этом - вы, вероятно, не захотите менять переписывание WP по умолчанию между комментариями BEGIN и END WORDPRESS в .htaccess, потому что WP перезапишет эту часть, когда вы выполните sh ваши настройки постоянной ссылки. Но дополнительная внутренняя перезапись индекса. php в index2. php после может, вероятно, решить эту проблему.

  • Если mod_proxy доступен, вы можете прокси-запрос внутри. Возможно, не самый лучший с точки зрения производительности, но, по крайней мере, альтернатива внешнему переписыванию, если вы хотите избежать этого любой ценой.

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