Зеркальное отображение файла в htaccess

#.htaccess

Вопрос:

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

Посещения пользователей: https://example.com/items/{some child folder}

Пользователь видит этот файл в зеркальном отображении: https://example.com/items/listing.php

Я хочу, чтобы пользователь мог видеть этот файл, но при этом он не хочет, чтобы он перенаправлялся. Есть какие-нибудь идеи?

Обновить
Я нашел решение вышеуказанной проблемы. Однако мне нужно решить еще один вопрос. Как я могу запретить файлу listing.php в /products папке следовать перенаправлению?

 RewriteEngine On
RewriteRule ^products/(.*) index.php?name=$1 [NC,L]
 

Комментарии:

1. Пожалуйста, поделитесь своим файлом правил htaccess в своем вопросе, который вы пробовали, спасибо.

2. Я не смог успешно найти ни одного примера для этого. Не уверен, что это просто я сегодня медлю, но для меня это просто не имеет большого смысла @RavinderSingh13

3. Вы хотите внедрить внутреннее правило перезаписи. Это не перенаправление, так как оно не изменит URL-адрес, видимый в браузере, и не требует второго запроса. Взгляните на документацию модуля перезаписи, который предоставляет http-сервер apache. Он поставляется с отличными примерами, я уверен, что вы сможете реализовать это самостоятельно: httpd.apache.org/docs/current/mod/mod_rewrite.html

4. @arkascha Я посмотрел там и не вижу отличного способа сделать это. Я нашел решение, которое «сработало бы», однако у него есть проблема. Я хочу по-прежнему иметь возможность знать, к какому файлу перешел пользователь. Если я попытаюсь повторить имя файла, он покажет файл, в который он был переписан, а не фактическое местоположение.

5. Пожалуйста, ознакомьтесь с «суперглобальной» переменной, которую предлагает php: php.net/manual/en/language.variables.superglobals.php Особенно содержание $_SERVER и $_REQUEST должно представлять для вас интерес.

Ответ №1:

Как я могу запретить файлу listing.php в /products папке следовать перенаправлению?

 RewriteRule ^products/(.*) index.php?name=$1 [NC,L]
 

Будьте более конкретны в регулярном выражении. Если ваши продукты не содержат точек в URL-пути, исключите точки в регулярном выражении. Например:

 RewriteRule ^products/([^./] )$ index.php?name=$1 [L]
 

Вышесказанное предполагает, что URL-адреса ваших продуктов имеют форму /products/<something> . Где <something> не может состоять из точек или косых черт (поэтому естественно исключает listing.php ) и должно состоять из «чего-то», т. е. не пустой.

Если вам специально не нужен NC флаг, это потенциально может привести к дублированию содержимого.

Если вы хотите быть явным, включите условие ( RewriteCond директиву):

 RewriteCond %{REQUEST_URI} !^/products/listing.php$
RewriteRule ^products/([^/] )$ index.php?name=$1 [L]
 

Переменная REQUEST_URI сервера содержит корневой URL-путь, начинающийся с косой черты. ! Префикс на условном шаблоне отрицает регулярное выражение.

Или используйте отрицательный внешний вид в RewriteRule шаблоне, не используя условие. Например:

 RewriteRule ^products/(?!listing.php)([^/] )$ index.php?name=$1 [L]
 

Ссылка: