Назад | Перейти на главную страницу

Apache Redirect без включения корня документа в правило перезаписи

У меня есть такое рабочее правило:

RewriteRule ^(.*)/amp/$ https://example.com/$1?amp=1 [QSA,R=301,NC,NE,L]

Для перенаправления https://example.com/register/amp/ к https://example.com/register?amp=1.

И он работает хорошо, но я бы хотел, чтобы URL-адрес в браузере не менялся, чтобы он загружал register?amp=1, но в браузере все еще отображается /register/amp/.

Чтобы добиться такого поведения, я пытаюсь изменить:

RewriteRule ^(.*)/amp/$ ./app.php/$1?amp=1 [QSA,R=301,NC,NE,L]

Но затем он перенаправляется на https://example.com/home/user/public_html/register?amp=1.

Таким образом, корень документа добавляется неправильно, и я не знаю, как изменить правило для этого.

RewriteRule ^(.*)/amp/$ ./app.php/$1?amp=1 [QSA,R=301,NC,NE,L]

Вам нужно удалить R (внешний "перенаправление") флаг. В ./ префикс на замена Строка также здесь лишняя и просто добавляет сложности, которую ОС должна оптимизировать.

Когда вы указываете относительный путь замена в контексте каталога (.htaccess или <Directory> контейнера в конфигурации сервера), и вы не указали альтернативный префикс (или "базовый" каталог) с RewriteBase директиве, то Apache снова добавляет префикс каталога (т.е. /home/user/public_html/ в данном случае) в конце процесса перезаписи. Именно потому, что это внешнее перенаправление, вы показываете этот префикс каталога в искаженном перенаправлении. Вместо этого вам нужна внутренняя перезапись.

Например:

RewriteRule ^(.*)/amp/$ app.php/$1?amp=1 [QSA,NC,NE,L]

Однако вы также включили app.php в замена, которые вы не указывали в своих целевых URL? (app.php может быть, правильно - вам следует переписать на настоящий файловая система path и не полагаться на какие-либо дополнительные перезаписи или подзапросы от mod_dir.)