Перезапись URL через Wordpress Rewrite или .htaccess
Прыжок для редактирования8, чтобы увидеть, как я решил это
Допустим, у меня есть блог Wordpress:www.animals.com
, У меня есть определенный файл PHP в моей директории темы:www.animals.com/wp-content/themes/mytheme/db.php
, Кроме того, у меня есть пользовательский шаблон для этой страницы, поэтому я создаю новую страницу в панели администрирования Wordpress, чтобы показатьdb.php
: www.animals.com/database
.
Поэтому, если я хочу прочитать что-нибудь о львах, я просто перейду к:www.animals.com/database/?animal=lion
(потому что именно так я решил написать PHP, вставив в запрос значение из $ _GET ['animal'], используя PDO и т. д.).
Теперь я хотел бы получить доступwww.animals.com/database/?animal=lion
какwww.animals.com/lion
.
Должен ли я использовать .htaccess или Wordpress Rewrite? Где я должен разместить мой .htaccess, в корне папки Wordpress (с wp-config.php и этими файлами) или в каталоге моей темы?
Тот из корня имеетRewriteBase /
и прочее из Wordpress по умолчанию. Что мне написать, чтобы добиться того, чего я хочу? Должен ли я поставить его до или после существующего кода?
РЕДАКТИРОВАТЬ: это моеpublic_html .htaccess и это то, что ядействительно хочу сделать: у меня есть сайт:www.domain.com
и когда вы печатаете этоhttp://www.domain.com/dios/?dios=agni
он показывает вам информацию о боге Агни. Я хотел бы напечататьwww.domain.com/dioses/agni
чтобы получить информацию о боге Агни. Файл PHP находится вwww.domain.com/wp-content/themes/smitespain/dios.php
Не работает х_х
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^dioses/(\w*)$ dios/?dios=$1 [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
EDIT2: я использую мультисайт(проверьте EDIT4)и снова / database / / dios / и / dioses / являютсяне фактические папки, которые я создал, вот название страницы, которую я создал в Wordpress. Дело в том, что теперь в заголовке вкладки отображается имя бога: S означает, что переменная $ _GET ['dios'] установлена, но не загружает файл (dios.php) = /
EDIT3Мне нужно получить доступ к domain.com/dios/?dios=agni специально, потому что это URL, который позволит PHP-файлу (dios.php) загружать get_header () из WordPress, поэтому я не могу получить доступ к файлу напрямую
EDIT4: Я решил убрать мультисайтовую вещь
EDIT5Это WordPress страницы, которые у меня есть:domain.com/dioses/
за(www.domain.com/wp-content/themes/smitespain/dioses.php)
domain.com/dios/?dios=thor
за(www.domain.com/wp-content/themes/smitespain/dios.php)
EDIT6: Я читал что-то в WordPress Codex .. и понял, что если я хочу пойти вdomain.com/dioses
я могу получить к нему доступ, зайдя вdomain.com/index.php?pagename=dioses
или жеdomain.com/?pagename=dioses
Итак, я добавил это междуRewritebase /
и следующее правило:RewriteRule example/test ?pagename=dioses
а такжеdomain.com/example/test
перенаправляет меня наdomain.com/dioses
но это также меняет URL в адресной строке :(
Дело в том, если я попробую это:RewriteRule example/test ?pagename=dios&dios=thor
он отправит меня на страницу «dios» без «? dios = thor»
EDIT7: я начал использовать переписывание WordPress, я добавил это в функции моей темы.
function my_rewrite_rules() {
add_rewrite_rule(
'blah',
'index.php?pagename=dios&dios=agni',
'top'
);
}
add_action( 'init', 'my_rewrite_rules' );
и снова .. он загружает страницу dios, без? dios = agni
EDIT8: и вот наконец мне удалось заставить его работать =)
первое, что мне нужно было знать, это новый?dios=XXXX
больше не будет доступен для$_GET['dios']
вместо этого вам нужно позвонить$wp_query->query_vars['dios']
поэтому я добавил это в functions.php моей темы
function add_query_vars($new_var) {
$new_var[] = "dios";
return $new_var;
}
add_filter('query_vars', 'add_query_vars');
function add_rewrite_rules($rules) {
$new_rules = array('([^/]+)' => 'index.php?pagename=dios&dios=$matches[1]');
$rules = $new_rules + $rules;
return $rules;
}
add_filter('rewrite_rules_array', 'add_rewrite_rules');
я удостоверюсь$wp_query->query_vars['dios']
на самом деле установлен
тогда я просто добавляю обычное правило