.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-адрес (таким образом изменяя то, что находится в строке местоположения браузера), переписывание происходит полностью на стороне сервера.