Использование mod_rewrite для перенаправления всех URL-адресов в безопасный, без поддоменов и подпапок с исключениями - PullRequest
0 голосов
/ 06 декабря 2011

Я пытаюсь перенаправить все запросы на:

Требование 1: протокол https, определенная подпапка и отсутствие субдомена www.

Так, например, "http://www.example.com" перенаправляетto "https://example.com/subfolder/"

Требование 2: Запросы для страниц в подпапке не должны перенаправляться в корневую подпапку.например: "http://www.example.com/subfolder/subfolder2/"redirects to" https://example.com/subfolder/subfolder2/"

Требование 3: требования 1 и 2 должны выполняться для всех запросов, кроме файла robots.txt, расположенного в корневом каталоге (поэтому следующие URL не будут перенаправлены):

Вот что у меня есть до сих пор:

RewriteEngine on
# anything not a file or a directory goes to subfolder root
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/subfolder/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://example.com/subfolder/$1 [R=301]

# non secure http protocol redirects to secure
RewriteCond %{SERVER_PORT} !443
RewriteRule (.*) https://example.com/subfolder [R=301]

# root redirects to subfolder root file
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/subfolder/index.php [R=301]

# www subdomain is redirected to domain
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301]

# Last check to redirect with entire trail, not sure if this ever catches a request.
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

И все же файл example.com/robots.txt перенаправляется в подпапку.

1 Ответ

1 голос
/ 09 декабря 2011

Вот мое полное решение:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/subfolder/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://example.com/subfolder/$1 [R=301]

RewriteCond %{REQUEST_URI} /robots.txt
RewriteRule ^(.*)$ $1 [L]

RewriteRule ^(/)?$ https://example.com/subfolder/ [R=301,L]

RewriteCond %{HTTP_HOST} ^www\. [OR]
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
...