Перенаправление .htaccess без изменения адресной строки - PullRequest
21 голосов
/ 20 августа 2009

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

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

RewriteEngine On

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

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

Приложения : строка адреса не меняется в Firefox при перенаправлении, что я и хочу сделать. Это просто изменяется один раз, чтобы отразить конечную точку. Safari меняет его на каждом шаге . Есть ли способ избежать этого?

1 Ответ

40 голосов
/ 20 августа 2009

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

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

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

RewriteEngine On
RewriteBase /

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