Как мне изменить Request_URI, используя Apache или PHP? - PullRequest
1 голос
/ 06 февраля 2010

Мне нужна помощь с магией перезаписи URL. У меня проблемы с изменением переменной Request_URI.

Я хотел бы переключиться между двумя сайтами http://host.com/alpha и http://host.com/beta. Они оба обрабатываются одним и тем же php-скриптом. Этот скрипт http://host.com/index.php.

Ожидается, что для index.php будет задана переменная GET SITE, которая сообщит ему, какой сайт отображать. Он также использует REQUEST_URI, чтобы определить, какой контент отображать. Чтобы это работало, alpha или beta необходимо удалить из исходного запроса. Вот где я застрял.

Таким образом, REQUEST_URI начинается с / alpha / content / file и должен стать /content/file.

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

RewriteCond %{REQUEST_URI} /(alpha|beta)(.*)   
RewriteRule .* index.php?site=%1  

index.php:

<?php
echo "Site: " . $_GET['site'] . "<br/>";
echo "Request_URI: " . $_SERVER['REQUEST_URI'] . "<br/>";
//get_html($_SERVER['REQUEST_URI']);
?>

Я надеюсь, что мне повезет больше с SetEnvIf и Alias ​​для Apache.

Буду очень признателен за любые идеи о том, как это сделать. Спасибо.

1 Ответ

2 голосов
/ 06 февраля 2010

Довольно прост в управлении:

RewriteRule ^(alpha|beta)/?(.*) /$2?site=$1 [R,L]

Это будет временно перенаправлять (код состояния HTTP 302) любые URL-адреса, начинающиеся с «альфа» или «бета», на ресурс без «альфа» или «бета» в начале, но добавляемые как строка запроса, связанная с запросом переменная "сайт".

Пример:

// Will be redirected to http://host.com/shoes/nike/order.php?site=alpha
GET http://host.com/alpha/shoes/nike/order.php

EDIT Это не будет учитывать строки запроса, предоставленные исходным вызовом GET. Если вам это нужно, сделайте следующее:

RewriteRule ^(alpha|beta)/?(.*) /$2?site=$1 [QSA,R,L]
RewriteRule .* index.php [NC,L]

Ура!

...