переписывать url, чтобы скрыть реальный путь к странице

Я недавно с помощью SO решил проблему с htaccess rewriterule:

Повторное использование поддомена в правиле перезаписи

В результате, когда кто-то входит

whatever.example.com/anypage

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

whatever.example.com/somepath/whatever/anypage

То, что я хочу сделать, - найти способ просто показать whatever.example.com/anypage в адресной строке с содержимым whatever.example.com/somepath/whatever/anypage .

В упомянутой выше должности Джон Лин четко упоминает следующее:

перенаправления всегда меняют то, что находится в адресной строке URL-адреса браузера

Однако я знаю некоторые очень частые случаи перезаписи URL, которые будут отображаться в адресной строке, скажем, например:

example.com/article-1-15

но фактически показывает содержание

example.com/somepath/somepage.php?article=1&otherparam=15

Как это применимо к моему делу? Я действительно хочу иметь крошечный URL-адрес, но, похоже, я что-то пропустил.

4
nl ja de

1 ответы

Вы можете попробовать что-то вроде этого:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI}  ^/([^/]+)$
RewriteRule .*  http://whatever.example.com/somepath/whatever/%1 [L]

Он будет отображать:

<Код> http://whatever.example.com/anypage

К ресурсу по адресу:

<Код> http://whatever.example.com/somepath/whatever/anypage

показывая всегда в адресной строке браузера:

<Код> http://whatever.example.com/anypage

<Сильный> ОБНОВЛЕНО

Если что-то динамическое и то же самое в URI подстановки, вот еще один вариант:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST}  ([^/]+)\.example\.com.*
RewriteCond %{REQUEST_URI}  ^/([^/]+)$
RewriteRule .*  http://%1.example.com/somepath/%1/%2 [L]

Это будет работать до тех пор, пока оба «независимо» на пути замещения одинаковы. Если это не так, последнее «все» должно быть жестко запрограммировано так:

RewriteRule .*  http://%1.example.com/somepath/whatever/%2 [L]

Другого способа нет, поскольку входящий URL-адрес его не имеет.

2
добавлено
Предположим, у меня есть URL Like www.admin.com/23445.zip, который автоматически перенаправится на www.admin.com/files/23445.zip, где 23445 будет динамически .. Каким будет правило?
добавлено автор Hola, источник
«что бы ни было» является динамичным, уверены ли вы, что ваш htaccess сделает это?
добавлено автор Sebas, источник
Вы не видите, что ваш htaccess никогда не будет обрабатывать динамические поддомены? Возможно, я ошибаюсь, но это кажется довольно очевидным, так как вы жестко кодируете его в перезаписывающем устройстве
добавлено автор Sebas, источник
удивительный, позвольте мне посмотреть
добавлено автор Sebas, источник
% 1 заменяется на index.php (я прошу si.php-страницу, поэтому он должен быть по умолчанию directoryindex из моего php.ini), а имя поддомена исчезает с URL-адреса. Никаких следов «si.php», которые должны идти в конце вместо% 2, если я хорошо понял вашу перезапись.
добавлено автор Sebas, источник
http://testacc.example.com/si.php перенаправляет на http://index.php.example.com/path/index.php/
добавлено автор Sebas, источник
damnit, у моего сервера должно быть что-то, препятствующее его запуску
добавлено автор Sebas, источник
удаление r = 301 сделало это ... спасибо за ваше время
добавлено автор Sebas, источник
Ну, единственный способ убедиться, что он делает то, что вам нужно, это проверить его.
добавлено автор Felipe Alameda A, источник
То, что правило пытается сделать, - это сохранить последнюю папку /anypage в качестве последней папки. Вот и все, поэтому имена папок или поддоменов не важны.
добавлено автор Felipe Alameda A, источник
@Sebas Я понимаю, что вы сказали в своем комментарии, поэтому я обновил свой ответ. Я не видел этого в этом вопросе.
добавлено автор Felipe Alameda A, источник
% 1 - это «любой» субдомен в запрошенном URI http://whatever.example.com/anypage , а % 2 - «любая страница» в том же URI.
добавлено автор Felipe Alameda A, источник
В моем ответе нет index.php в правилах, поэтому он не может перенаправляться на URI в вашем комментарии из-за моих правил. Я протестировал его и получил: http://testacc.example.com/si.php перенаправлен на http://testacc.example.com/somepath/testacc/si.php , что вы описываете в своем вопросе.
добавлено автор Felipe Alameda A, источник
Вы всегда можете протестировать его здесь , но, возможно, это сценарий si.php, который перенаправляется на http : //index.php.example.com/path/index.php/ .
добавлено автор Felipe Alameda A, источник
На всякий случай, это тихое перенаправление, как вы просили, поэтому URI подстановки не отображается в адресной строке браузера. Чтобы показать это, в этот флаг должен быть добавлен R = 301 в флаг L .
добавлено автор Felipe Alameda A, источник