.htaccess RewriteRule в путь без изменения URL-адреса

Итак, у меня есть эта проблема:

  • Базовый сайт, расположенный по адресу http://example.com/
  • Второй веб-сайт, расположенный по адресу http://example.com/web2/
  • Люди, делающие различные запросы на второй веб-сайт, как http://example.com/myWeb/pg1 и http://example.com/web2/pg2

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

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

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

Папка /web2/ на самом деле существует на сервере, но как я могу имитировать папку /alternative-url-web2/ и "перенаправить" запросы на /web2/?

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

Спасибо.


Обновление

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

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

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

  • http://ex.com/alternative-url-web2 перенаправляется на 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/ есть a .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 вызывать все это? Если да, как я могу это исправить?

Ответы

Ответ 1

Включите 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]

Ответ 2

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

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

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