ВОПРОС
Сейчас я работаю с расширением для многосайтовой сети. У меня есть некоторые файлы, который используют переменные URL для того, чтобы загружать данные из другой базы данных. Одну базу данных я сделал в WordPress, а другую вне WordPress.
В той версии, которая создавалась вне WordPress, при переходе к URL будет проверяться группа или имя пользователя в базе данных. И в зависимости от того, это имя пользователя или группа будут загружаться из соответствующего файла.
Но я совсем не понимаю, как это можно реализовать в условиях многосайтовой сети. Насколько я знаю, .htaccess нельзя переписать при помощи расширений, но как тогда можно заставить его работать на всех сайтах?
Может быть, мне нужно поместить его вместе с pretty в корневой каталог и добавить файлы, которые расположены в дополнении? Но если я сделаю так, то это будет работать со всеми сайтами или нет?
Лично мне кажется, что можно использовать что-то вроде RewriteMap. И я сам сейчас пытаюсь разобраться в этом вопросе. Но на всякий случай, я лучше спрошу совета у вас.
Вот мой .htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(w.+)$ ./pretty.php?pretty=$1 [QSA]
ErrorDocument 404 /404.php
Вот pretty:
// First check if passed pretty parameter is a username.
if(checkIfUserByUsername($_GET[‘pretty’]))
{
$_GET[‘username’] = $_GET[‘pretty’];
include(“USERNAME.php”);
// If not a username, check to see if it’s an event.
}else if(checkIfStreamByPretty($_GET[‘pretty’])){
$_GET[‘id’] = getStreamIdFromPretty($_GET[‘pretty’]);
include(“GROUP.php”);
}else{
// If it’s none, redirect to the 404 page.
include(“404.php”);
}
В общем, думаю, что вы правильно поняли мой вопрос. Есть ли какой-нибудь способ решения моей проблемы?
ОТВЕТ
Если я правильно понял, чего ты хочешь достичь, то сейчас расскажу возможное решение. Вообще, здесь даже не потребуется перезапись файлов. Самое простое решение – добавить pretty.php в header.php в шаблоне. И это все будет загружаться при каждом запросе к интерфейсу веб-сайта. Если тебе необходимо загрузить код только на определенной странице, то можно воспользоваться is_page.
Если что, то вот пример того, что тебе необходимо добавить:
if(is_page(“groups”)){
if(checkIfUserByUsername($_GET[‘pretty’]))
{
// the rest of your code
}
}
В том случае, если ты хочешь реализовать все это через расширение, то просто используй функцию add_action:
add_action(‘wp_head’, ‘function_containing_your_code’);
Но, при подключении дополнения лучше убедиться, что ты запускаешь код именно на той странице, которая тебе нужна.
В целом, если разобраться, то редактировать можно любые файлы, включая тот, что тебе нужен. Но прежде, чем начинать редактирование, проверь, есть ли у тебя права на изменения файла. А так, изменить его можно даже при помощи PHP:
$file = fopen(“/path/to/.htaccess”, “a+”);
fwrite($f, “RewriteRule ^(w.+)$ ./pretty.php?pretty=$1 [QSA]”);
fclose($f);
Вообще, кто-то может сказать, что эти изменения могу нести угрозу безопасности, но это не так. Если ты знаешь, как правильно обращаться с правами доступа, то не возникнет никаких проблем.