Ссылки перенаправляются на страницу Apache2 Ubuntu по умолчанию [дубликат]

Вы должны только await на что-то, что возвращает Promise. Я бы определенно рекомендовал читать Promises до того, как вы начнете работать с async и await. Вероятно, вы можете заставить этот пример работать, создав свою собственную функцию-обертку вокруг request, чтобы вернуть ее, например:

function doRequest(url) {
  return new Promise(function (resolve, reject) {
    request(url, function (error, res, body) {
      if (!error && res.statusCode == 200) {
        resolve(body);
      } else {
        reject(error);
      }
    });
  });
}

// Usage:

async function main() {
  let res = await doRequest(url);
  console.log(res);
}

main();

Изменить: альтернативно, вы можете изучить request-prom вместо обычного модуля запроса.

223
задан Willi Mentzel 14 March 2016 в 20:10
поделиться

19 ответов

Для этой цели можно использовать Redirect

Redirect 301 / www.example.com/store

Или Псевдоним для отображения

Alias / /store

Редактировать : mod_alias применим только в httpd.conf.

Refrences

4
ответ дан Abhishek Gurjar 19 August 2018 в 03:52
поделиться

попытайтесь использовать ниже строки в htaccess

Примечание: вам может потребоваться проверить, что является именем default.html

default.html - это файл, который загружается по умолчанию в корневой папке.

RewriteEngine

Redirect /default.html http://example.com/store/

1
ответ дан Abouasy 19 August 2018 в 03:52
поделиться

Попробуйте следующее:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^$ store [L]

Если вы хотите внешнее перенаправление (которое заставляет браузер посещения отображать перенаправленный URL-адрес), установите там также флаг R:

RewriteRule ^$ /store [L,R=301]
102
ответ дан Andrew 19 August 2018 в 03:52
поделиться
  • 1
    Это сработало красиво. Оба примера.com и www.sample.com перенаправляются на сайт www.sample.com/store. Это то, чего я хотел. Спасибо, Гумбо, и все, кто ответил. Я многому научился, читая ваши отзывы и оценивая отзывы. – user 13 June 2009 в 11:09
  • 2
    Мне любопытно, будет ли это показывать www.example.com как URI после перенаправления? Если нет, как бы это изменить? – stefmikhail 5 October 2011 в 22:05
  • 3
    ♦ - И почему ваше решение было бы лучше, чем Сандер внизу? Я заметил, что ваша заключительная строка такая же, но если это все, что необходимо, зачем включать RewriteCond и первый RewriteRule? – stefmikhail 5 October 2011 в 22:42
  • 4
    если этот код используется, можете ли вы ввести свой браузер exmple.com/../aboveSubDir? – user 27 July 2012 в 04:05
  • 5
    @GamErix Это будет разрешено /aboveSubDir либо браузером, либо сервером. – Gumbo 27 July 2012 в 06:47

Еще одна альтернатива, если вы хотите переписать URL-адрес и скрыть исходный URL-адрес:

RewriteEngine on
RewriteRule ^(.*)$ /store/$1 [L]

При этом, если вы, например, введите http://www.example.com/product.php?id=4, он будет прозрачно открывать файл в http://www.example.com/store/product.php?id=4 но не отображая пользователю полный URL-адрес.

20
ответ дан Andrew Barber 19 August 2018 в 03:52
поделиться
  • 1
    Добавьте QSA (добавление строки запроса) в [L] ([L, QSA]), если вы хотите, чтобы строки запроса переносились на перезаписанный URL-адрес. – devios1 10 October 2013 в 05:53
  • 2
    @chaiguy спасибо за подсказку, но на моем сервере он работал без QSA (но я согласен, что, вероятно, лучше добавить QSA). Может быть, это из-за какой-то специальной конфигурации моего сервера apache? – gaborous 22 March 2014 в 16:20
  • 3
    Этот метод для меня, example.com показывает контент из example.com/store прозрачно, но example.com/test перенаправляет на example.com/store/test, показывая URL-адрес – Geoffrey Hale 24 March 2017 в 21:31

Я думаю, что основные проблемы с кодом, который вы выложили:

  • первая строка соответствует хосту, начинающемуся с строго sample.com, так что www.sample.com не соответствует.
  • во второй строке требуется хотя бы один символ, за которым следует www.sample.com, который также не соответствует (почему вы избежали первого w?)
  • ни один из включенных правила перенаправляются на URL, указанный вами в вашей цели (плюс, образец ошибочно написан как samle, но это неуместно).

Для справки, вот код, который у вас есть в настоящее время:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^sample.com$
RewriteRule (.*) http://www.sample.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.sample\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]
3
ответ дан Artem Russakovskii 19 August 2018 в 03:52
поделиться

Раньше я использую следующий код, который правильно работает для перенаправления корневого URL-адреса каждого из моих доменов / поддоменов в их подкаталоги соответствия, которые в точности называются суб-доменом, следующим образом:

RewriteCond %{HTTP_HOST} ^sub1.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub1.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

Однако, когда я хочу добавить еще одну подсистему или домены, ее нужно будет добавить в код выше. Это должно быть гораздо удобнее упростить, чтобы работать как подстановочный знак (*), как показано ниже:

RewriteCond %{HTTP_HOST} ^sub
RewriteCond %{REQUEST_URI} !/subs/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

Поэтому всякий раз, когда добавляются дополнительные поддомены / домены, если имя поддомена имеет префикс sub (например, : sub3.domain1.com, sub1.domain3.com и т. д.), код останется в силе.

4
ответ дан Chetabahana 19 August 2018 в 03:52
поделиться

Я был удивлен, что никто не упоминал об этом:

RedirectMatch ^/$ /store/

В принципе, он перенаправляет корень и только корневой URL. Ответ возник из этой ссылки

106
ответ дан Community 19 August 2018 в 03:52
поделиться
  • 1
    спасибо, это отлично поработало для меня с уже существующим правилом. нет конфликта. – thescientist 12 March 2014 в 04:32
  • 2
    Это прекрасно работает. Кроме того, он охватывает как http, так и https. – Sayem Shafayet 17 May 2015 в 15:18
  • 3
    И это для 301 перенаправления: RedirectMatch 301 ^/$ /store/ – Andrea 13 August 2016 в 09:27
  • 4
    Да, это проще, если переписать. Благодаря! – Orden 26 September 2016 в 00:06
  • 5
    @Andrea И это для 302 временного перенаправления: RedirectMatch 302 ^ / $ / store / – Faizan Rupani 4 July 2018 в 10:22

Я не понимаю ваш вопрос ...

Если вы хотите перенаправить каждый запрос в подпапку:

RewriteRule ^(.*)$ shop/$1 [L,QSA]

http://www.example.com/* -> wwwroot/store/*

Если вы хотите перенаправить на подпапку, которая имеет доменное имя

RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ %1/$1 [L,QSA]

http://www.example.com/* -> wwwroot/example.com/*
8
ответ дан inf3rno 19 August 2018 в 03:52
поделиться
  • 1
    Мне нравится ваш код ([^\.]+\.[^\.]+)$, чтобы зарезервировать домен как имя подпапки. – Chetabahana 16 February 2016 в 16:53

Вот что я использовал для перенаправления в подкаталог. Это сделало это невидимым и до сих пор позволяет через запросы, которые соответствуют существующему файлу или тому подобное.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteRule ^(/)?$ subdir/index.php [L]

Измените site.com и subdir своими значениями.

75
ответ дан Jage 19 August 2018 в 03:52
поделиться
  • 1
    Отличные старые ссылки (с / subdir / in them) по-прежнему работают! – Zar Shardan 27 August 2012 в 09:24
  • 2
    Работает так, как ожидалось! Большой! – kachar 10 January 2013 в 13:15
  • 3
    только root - не выполняет подкаталоги – php-b-grader 22 June 2013 в 07:19
  • 4
    Для меня это дает «Внутренняя ошибка сервера». : / – Pithikos 1 March 2014 в 20:46
  • 5
    Большое вам спасибо, вы не знаете, как долго я это точно искал. – Base Desire 17 August 2014 в 20:27

Это казалось самым простым решением:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

Я получал петли перенаправления с некоторыми другими решениями.

13
ответ дан John Conde 19 August 2018 в 03:52
поделиться

вы просто добавляете этот код в свой .htaccess файл

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /folder/index.php [L]
</IfModule>
0
ответ дан karthikeyan ganesan 19 August 2018 в 03:52
поделиться

Большинство из приведенных выше решений верны, но все они пропускают прозрачность перенаправления.

В моем случае, посетив сайт www.example.com, я хотел получить перенаправление в подкаталог / хранилище, но без обновления URL-адреса на www.example.com/store. (все, что я хочу, - это получить код этого кода страницы). Если это ваш случай, то решение ниже работает отлично.

RewriteEngine on
RewriteCond %{HTTP_HOST} example\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /store/$1 [L]

source: http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory

5
ответ дан Mahmoud Zalt 19 August 2018 в 03:52
поделиться
  • 1
    Что мне следует изменить, если мне нужно, чтобы www.example.com перенаправлялся на сайт www.othersite.com/store без обновления URL-адреса? Я попытался, но не смог адаптировать ваш код. – steps 23 September 2015 в 11:10
  • 2
    Я попытался изменить последнюю строку на RewriteRule ^(.*)$ http://otherpage.com/subfolder/$1 [L], но она обновляет URL-адрес – steps 23 September 2015 в 11:16
  • 3
    Все, что вам нужно, это заменить слова example и store. – Mahmoud Zalt 24 September 2015 в 14:14
  • 4
    Я не очень хорошо объяснил. Я владею доменами example.com и otherpage.com. Когда я посещаю example.com, я хочу, чтобы содержимое из otherpage.com/subfolder отображалось без обновления URL-адреса – steps 24 September 2015 в 15:53
  • 5
    Ну, мой ответ выше не делает этого. Попробуйте опубликовать новый вопрос. – Mahmoud Zalt 25 September 2015 в 17:11

Попробует subdir, если файл не существует в корне. Это необходимо, поскольку я переместил основной веб-сайт .html, который ожидает, что он будет запущен на корневом уровне и подталкивает его в поддиректор. Работает только в том случае, если все файлы плоские (в поддире нет возможности обхода htaccess). Полезно для связанных вещей, таких как css и js-файлы.

# Internal Redirect to subdir if file is found there.
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
RewriteCond %{DOCUMENT_ROOT}/subdir/%{REQUEST_URI} -s
RewriteRule ^(.*)$ /subdir/$1 [L]
0
ответ дан mikeytown2 19 August 2018 в 03:52
поделиться

Два способа выхода из возможных решений для этого: 1. Создайте файл .htaccess в корневой папке (просто замените example.com и my_dir соответствующими значениями):

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_dir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_dir/index.php [L] 
</IfModule>
  1. Использовать RedirectMatch только для перенаправления корневого URL «/» в другую папку или URL-адрес, RedirectMatch ^ / $ http://www.example.com/my_dir
1
ответ дан Mushtaq Hussain 19 August 2018 в 03:52
поделиться

Я обнаружил, что для того, чтобы избежать кругового перенаправления, важно ограничить область перенаправления корневым каталогом. Я бы использовал:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]
6
ответ дан Nir O. 19 August 2018 в 03:52
поделиться

Чтобы установить невидимую переадресацию из корня в подпапку, вы можете использовать следующий RewriteRule в /root/.htaccess:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [NC,L]

Правило выше будет внутренне перенаправлять браузер из:

-

И

-

, в то время как браузер останется в корневой папке.

16
ответ дан starkeen 19 August 2018 в 03:52
поделиться

Немного googling дает мне следующие результаты:

RewriteEngine On RewriteBase / RewriteRule ^ index. (. *)? $ http://domain.com/subfolder/ [r = 301]

Это перенаправит любую попытку доступа к файлу с именем index.something в вашу подпапку, независимо от того, существует файл или нет.

Или попробуйте это:

RewriteCond% {HTTP_HOST}! ^ Www.sample.com $ [NC] RewriteRule ^ (. *) $% {HTTP_HOST} / samlse / $ 1 [R = 301, L]

Я не делал много перенаправления в файле .htaccess, поэтому я не уверен, что это сработает.

3
ответ дан Steven 19 August 2018 в 03:52
поделиться

Вы можете использовать правило перезаписи, которое использует ^ $ для представления корня и переписывает его в ваш каталог / store, например:

RewriteEngine On
RewriteRule ^$ /store [L]
243
ответ дан user 19 August 2018 в 03:52
поделиться
  • 1
    RewriteRule ^ /? $ /Index.do [R] – barclay 19 July 2012 в 20:28
  • 2
    ^ / $ никогда не соответствует, поэтому я думаю, что ^ /? $ не нужно. – NateS 13 March 2014 в 23:05
  • 3
    Это делает мой базовый каталог 403 ошибкой ... – Eric Wolf 22 April 2014 в 15:08
  • 4
    Можно ли затем показать полный URL-адрес и продолжить обработку правил? В моем случае я переписываю некоторые URL-адреса, чтобы они были хороши. Это сохранит url example.com - я бы хотел example.com/store, а затем продолжить с другими переписываниями. – gin93r 20 November 2014 в 14:03
  • 5
    Совсем недавно я потратил много времени на отладку, почему это не сработало на сайте в Ubuntu Apache 2.4.7. Повторная отладка показала, что правило было удалено и генерировало ВНУТРЕННИЙ ПЕРЕСМОТР. Тогда, казалось, просто припарковали это и искали индексную страницу. Оказывается, что если mod_dir включен И есть кандидат в индексной странице в каталоге, он переопределяет mod_rewrite, ЕСЛИ вы устанавливаете: DirectoryCheckHandler On – user188737 10 April 2018 в 19:47

Я отвечу на исходный вопрос, не указав другой возможный синтаксис (есть много других ответов), но, указывая на то, с чем мне приходилось иметь дело, потребовалось некоторое время, чтобы выяснить:

What am I doing wrong?

Возможно, что% {HTTP_HOST} не заполняется должным образом или вообще отсутствует. Хотя, я видел только, что это происходит только на одной машине на общем хосте, с некоторым пользовательским исправленным apache 2.2, тем не менее, это возможность.

0
ответ дан Μάκης Παλάσης 19 August 2018 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: