У меня есть такое рабочее правило:
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.)