Как получить различные перенаправления htaccess на основе запрошенного подкаталога? - PullRequest
0 голосов
/ 27 февраля 2020

Я попытался поискать вопрос, который решает эту проблему, но я не знал точную формулировку, поэтому не смог найти ничего полезного.

У меня установлена ​​Wordpress на моем сайте, после это руководство, я смог переместить его в другую папку, поэтому у меня теперь есть 2 папки в моем основном каталоге public_ html.

Я пытаюсь загрузить несколько набросков p5. js во вторую папку, чтобы я мог сослаться на них с сайта Wordpress. Проблема возникает, когда я пытаюсь связать их в iframe, как в этом руководстве . Я ссылаюсь на src="website.com/projects/project_name/sketch.html", но, к сожалению, он перенаправляется обратно на страницу установки WordPress 404.

После некоторых поисков, похоже, проблема в моем основном файле .htaccess. Мой файл выглядит так (с измененным примером / my_subdir)

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L] 
</IfModule>

, поэтому мой вопрос: как мне изменить это, чтобы сохранить перенаправление с "website.com" на my_subdir / index. php (это установка Wordpress), но добавьте оговорку, чтобы не перенаправлять запросы website.com/directory2 (где будут храниться проекты)

1 Ответ

0 голосов
/ 27 февраля 2020

Если HOST в вашем коде example.com - это то, что вы указали в своем вопросе как website.com, и я предполагаю, что ваш код уже работает правильно, за исключением запроса directory2. Затем попробуйте это:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_URI} !^/directory2/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L] 
</IfModule>

EDITED Для каталогов 2

* 1010 требуется изменить только 1 строку. Вот мой тест:

IP: 172.18.0.2

Root Каталог: / www/htdocs

Дерево каталогов (html содержимое файла):

-- htdocs/
 | -- my_subdir/
 |  | -- index.html (subdir index.html)
 |  | -- a1.html    (subdir a1.html)
 | 
 | -- directory2/
 |  | -- index.html (dir2 index.html)
 |  | -- b1.html    (dir2 b1.html)
 |
 | -- index.html    (helloworld index.html)
 | -- .htaccess

Вот мой .htaccess файл:

 RewriteEngine on
 RewriteBase /

 RewriteCond %{HTTP_HOST}        ^(172.18.0.2)$
 RewriteCond %{REQUEST_URI}      !^(/my_subdir/)       [NC]
 RewriteCond %{REQUEST_URI}      !^(/directory2/)      [NC]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$              /my_subdir/$1

 RewriteCond %{HTTP_HOST}        ^(172.18.0.2)$
 RewriteRule ^(/)?$              my_subdir/index.html  [L]

Мои тесты:

  1. узел доступа
 [user@client tmp]$ wget 172.18.0.2
 Saving to: ‘index.html’
 [user@client tmp]$ cat index.html
 subdir index.html

запрос достиг my_subdir / index. html

доступ 172.18.0.2/my_subdir/a1.html
 [user@client tmp]$ wget 172.18.0.2/my_subdir/a1.html
 Saving to: ‘a1.html’
 [user@client tmp]$ cat a1.html
 subdir a1.html

запрос достиг my_subdir / a1. html

доступ 172.18.0.2/a1.html
 [user@client tmp]$ wget 172.18.0.2/a1.html
 Saving to: ‘a1.html’
 [user@client tmp]$ cat a1.html
 subdir a1.html

запрос достиг my_subdir / a1. html

доступ 172.18.0.2/directory2
 [user@client tmp]$ wget 172.18.0.2/directory2
 ...
 HTTP request sent, awaiting response... 301 Moved Permanently
 Location: http://172.18.0.2/directory2/ [following]
 ...
 Saving to: ‘directory2’
 [user@client tmp]$ cat directory2
 dir2 index.html

запрос достиг директории 2 / index. html

доступ 172.18.0.2/directory2/b1.html
 [user@client tmp]$ wget 172.18.0.2/directory2/b1.html
 Saving to: ‘b1.html’
 [user@client tmp]$ cat b1.html
 dir2 b1.html

запрос достиг каталог2 / b1. html

access 172.18.0.2/testerror
 [user@client tmp]$ wget 172.18.0.2/testerror
 ERROR 404: Not Found.
 [user@server log]$ tail error_log
 AH00128: File does not exist: /www/htdocs/my_subdir/testerror

запрос пытался достичь my_subdir / testerror и ничего не нашел

Итак, основываясь на этом маленьком test:

  1. любой запрос к моему IP-хосту проверил .htaccess правила перезаписи
  2. запрос только для хоста будет переписан в my_subdir / index. html (тест 1 )
  3. под-URL запроса, который не начинается с my_subdir или directory2, будет переписан в my_subdir с любой последующей строкой (тест 3 и 6)
  4. запрос на my_subdir с подробным именем файла будет доступен файл в my_subdir/ (тест 2)
  5. , запрос на directory2 не будет перенаправлен на my_subdir, и получит доступ к индексу или файлу на directory2 (тест 4 и 5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...