изменить URL-адрес с помощью mod_rewrite или hook

я пытаюсь добиться следующего:

пользователь вводит этот URL в браузер

http://mydomain.com/boston/categoryname/postname/

Затем я хочу получить первую «папку» и проверить, есть ли это «boston» или «newyork» – если да, то удалите эту часть URL-адреса, добавьте ее в качестве параметра запроса и передайте измененный URL-адрес в wordpress :

http://mydomain.com/categoryname/postname/?location=boston

Я попробовал это с помощью mod_rewrite apache:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^(boston|newyork)/(.*)$ /$2?location=$1 [NC,QSA,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 

в моих functions.php я добавляю фильтр для request

 add_filter('request', 'request_it'); function request_it($query_vars) { print_r($query_vars); } 

это эхо

 Array ( [page] => [name] => postname [category_name] => boston/categoryname [location] => boston ) 

поэтому местоположение передается как параметр запроса, но REQUEST_URI по-прежнему /boston/categoryname/postname/ вместо /categoryname/postname/ а wordpress пытается отобразить неправильное содержимое.

как я могу удалить местоположение из URL?
это mod_rewrite не правильная вещь для использования?
есть ли функция, где WP оценивает URL-адреса, которые передаются ей, где я могу подключиться и искать свое location ?

Solutions Collecting From Web of "изменить URL-адрес с помощью mod_rewrite или hook"

я исправил его с помощью прокси-модуля apache:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{QUERY_STRING} !location RewriteRule ^(boston|newyork)/$ /index.php?location=$1 [NC,QSA,P] RewriteCond %{QUERY_STRING} !location RewriteRule ^(boston|newyork)/(.*)$ /$2?location=$1 [NC,QSA,P] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 

опция [P] делает трюк.

Я нахожусь на подобном дерне. См .: гибкие переписывающие URL-адреса с WordPress. Нет, [R] или 301 переадресация не приведет вас туда. И любая регулярная перемотка htaccess вызывает проблемы, поскольку какая-то часть WPstill помогает самому оригинальному REQUEST_URI (или, возможно, PATH_INFO).

Вы заметили, что вы можете переопределить переменные $ _SERVER? (даже если это кричит взломать)

 echo "server".$_SERVER['REQUEST_URI']; //get's you: the original thing $_SERVER['REQUEST_URI'] = 'banana'; echo "server".$_SERVER['REQUEST_URI']; //gets you: banana 

Если вы что-то выяснили, отправьте его.