Я узнал из этого вопроса и ответа: Как написать if.. .else операторы mod_rewrite в .htaccess, что можно реализовать оператор If в .htaccess, но на Apache 2.4 и выше.
Из этого вопроса и ответа я узнал: оператор htaccess if, как реализовать оператор If для версий Apache менее 2.4. Ответ @julp почти решает мою проблему, но я не думаю, что мне разрешено делать «добавления» на виртуальном хостинге.
Есть ли обходной путь для использования If..Then..Else в .htaccess на Apache 2.2.29 в среде общего хостинга?
Обновление:
По указанию @Thakkie я добавляю свои особые требования.
Я пытаюсь разместить два домена с одной учетной записи общего хостинга. Мой файл .htaccess выглядит следующим образом:
<If “%{HTTP_HOST} == ‘domain2.com’”>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ domain2.com-directory/domain2-index.php [QSA,L]
</IfModule>
</If>
<Else>
RequestHeader set X-Prerender-Token "<MyToken>"
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www.domain1.com/domain1-index.php$ [NC]
RewriteRule ^(.*)$ https://www.domain1.com/domain1-index.php$1 [R=301,L]
<IfModule mod_proxy_http.c>
RewriteCond %{HTTP_USER_AGENT} baiduspider|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora\ link\ preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator [NC,OR]
RewriteCond %{QUERY_STRING} _escaped_fragment_
# Only proxy the request to Prerender if its a request for HTML
RewriteRule ^(?!.*?(\.js|\.css|\.xml|\.less|\.png|\.jpg|\.jpeg|\.gif|\.pdf|\.doc|\.txt|\.ico|\.rss|\.zip|\.mp3|\.rar|\.exe|\.wmv|\.doc|\.avi|\.ppt|\.mpg|\.mpeg|\.tif|\.wav|\.mov|\.psd|\.ai|\.xls|\.mp4|\.m4a|\.swf|\.dat|\.dmg|\.iso|\.flv|\.m4v|\.torrent|\.ttf|\.woff))(.*) http://service.prerender.io/https://%{HTTP_HOST}/$2 [P,L]
</IfModule>
# Transfers to www.domain1.com when domain1.com is entered
RewriteCond %{HTTP_HOST} ^domain1.com$ [NC]
RewriteRule ^(.*)$ https://www.domain1.com/$1 [L,R=301]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ domain1.com-directory/domain1-index.php [QSA,L]
</Else>
Я назначаю один набор операций для domain1.com и другой набор операций для domain2.com в зависимости от HTTP_HOST
с использованием <If><Else>
.
Я попробовал указанный выше файл .htaccess на выделенном сервере моего друга, на котором работает Apache 2.4, и это сработало.
Но, к сожалению, мой провайдер учетной записи общего хостинга использует Apache 2.2.29, поэтому <If></If>
и <Else></Else>
не поддерживаются.
Каков обходной путь для <If><Else>
в моей ситуации?