Подтвердить что ты не робот

.htaccess перенаправление без изменения адресной строки

Я пытаюсь написать правило .htaccess для перенаправления на script, который далее перенаправляет куда-то еще. Как, например, как сокращаются URL-адреса. Тем не менее, я не хочу, чтобы адресная строка менялась во время .htaccess части перенаправления. (Это нормально для перенаправления script, чтобы изменить местоположение.)

Я использую mod_rewrite, в настоящее время делая это:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /
RewriteRule (.+)$ "?url=$1" [L,R=301]

Есть ли флаг или другой метод, который я могу использовать для достижения того, что я пытаюсь сделать?

Дополнения. В Firefox нет строки местоположения, поскольку происходит переадресация, и это то, что я хочу сделать. Он просто меняется один раз, чтобы отразить конечную точку. Safari изменяет его на каждом шаге. Любой способ избежать этого?

4b9b3361

Ответ 1

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

Без флага R переадресация отсутствует, но переписывается внутренний запрос Apache, который скрыт от браузера. Таким образом, адресная строка не изменится. Однако по очевидным причинам вы не можете использовать внутренние перенаправления для внешних URI.

Так как вы, похоже, используете внутреннее перенаправление, просто удалите флаг R, и он должен работать:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+)$ ?url=$1 [L]