Если 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]
Мои тесты:
- узел доступа
[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:
- любой запрос к моему IP-хосту проверил
.htaccess
правила перезаписи - запрос только для хоста будет переписан в my_subdir / index. html (тест 1 )
- под-URL запроса, который не начинается с
my_subdir
или directory2
, будет переписан в my_subdir
с любой последующей строкой (тест 3 и 6) - запрос на
my_subdir
с подробным именем файла будет доступен файл в my_subdir/
(тест 2) - , запрос на
directory2
не будет перенаправлен на my_subdir
, и получит доступ к индексу или файлу на directory2
(тест 4 и 5)