2013-09-14 2 views
15

Итак, у меня есть эта проблема:.htaccess RewriteRule в путь без изменения URL

  1. Base Сайт, расположенный на http://example.com/
  2. Второй сайт расположен на http://example.com/web2/
  3. Люди делая различные запросы на второй сайт, как http://example.com/myWeb/pg1 и http://example.com/web2/pg2

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

Ideia, чтобы позволить пользователям получить доступ ко второму веб-сайт по двум следующим адресам:

  • http://example.com/web2/
  • http://example.com/alternative-url-web2/

Папка /web2/ фактически существует на сервере, но как может Я имитирую папку /alternative-url-web2/ и «перенаправляет» запросы на /web2/?

Обратите внимание: я не хочу, чтобы URL-адрес в браузере менялся, это должно быть «молчаливое перенаправление». И также я уверен, что все остальные запросы, такие как http://example.com/other, не перенаправляются на второй веб-сайт.

спасибо.


Update:

По @anubhava я мог бы просто решить эту проблему, добавив в моей .htaccess:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteRule ^alternative-url-web2(/.*|)$ /web2$1 [L,NC] 

Это, вероятно, работает нормально, но я заметил следующее:

  • http://ex.com/alternative-url-web2 is re направленный на http://ex.com/web2/ (изменение URL-адреса браузера);
  • http://ex.com/alternative-url-web2/ перенаправлен на http://ex.com/ (сменить URL-адрес браузера);
  • http://ex.com/alternative-url-web2/someRequest работает нормально и НЕ меняет URL-адрес браузера;
  • http://ex.com/alternative-url-web2/index.php работает нормально и не меняет URL-адрес браузера;

сайт Примечание:

В /web2/ есть более .htaccess что может быть причиной проводного поведения перенаправлять выше ... Так вот содержимый файл:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -f [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L] 
    RewriteRule ^.*$ index.php [NC,L] 
</IfModule> 

Может внутренний RewriteRule до index.php будет вызывать все это? Если да, как я могу это исправить?

ответ

5

Включение mod_rewrite и .htaccess через httpd.conf, а затем поместить этот код в каталоге .htaccess под DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^alternative-url-web2(/.*|)$ /web2$1 [L,NC] 

Альтернативный код:

RewriteRule ^alternative-url-web2/?$ /web2/ [L,NC] 
RewriteRule ^alternative-url-web2/(.+)$ /web2/$1 [L,NC] 
+0

По какой-то причине 'http: // ex.com/alternative-url-web2' перенаправляется на' http: // ex.com/web2/'и изменяется URL-адрес браузера. И ... 'http: // ex.com/alternative-url-web2 /' перенаправляется на 'http: // ex.com /'. – TCB13

+0

Но, 'http: // ex.com/alternative-url-web2/someRequest' правильно« перенаправляется »на' http: // ex.com/someRequest' без изменения URL-адреса в браузере. – TCB13

+0

Ваш первый код в порядке, проблема, похоже, является другим файлом .htaccess в каталоге 'web2'. (Пожалуйста, проверьте оригинальный вопрос). – TCB13

1

Это довольно просто переписывают. В файле Htaccess в корневом каталоге, добавьте следующую строку:

RewriteEngine On 
RewriteRule ^alternative-url-web2/?(.*)$ /web2/$1 [L] 

В отличие от редиректа, что делает браузер/клиент посылает новый запрос на новый URL (таким образом изменяя то, что в адресной строке браузера), переписывание происходит полностью на стороне сервера.

+0

Тот же вопрос, что и @anubhava. Я уже пробовал подобные вещи в прошлом, прежде чем задавать этот вопрос, также демонстрируя ту же проблему. – TCB13

+0

Неправильно ли переслать 'http: // ex.com/alternative-url-web222' на' http: // ex.com/web2/22'? – anubhava

+0

@ TCB13 Есть ли у вас другие правила в вашем файле htaccess? –

Смежные вопросы