Я хочу использовать .htaccess на сервере Apache для перенаправления на сервер только тех вызовов, которые не являются файлами или папками в файловой системе. Например, если сервер получает запрос на:
http://www.domain.tld/page1.html
И page1.html не является фактическим файлом на сервере, он должен 301 перенаправлять на:
http://new.domain.tld/page1.html
В противном случае он ничего делать не должен. Это возможно? Если да, то как? Если возможно, предоставьте пример кода. Код, который у меня сейчас есть:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.domain\.tld [NC]
Rewriterule ^(.*)$ http://subdomain.newdomain.tld/$1 [L,R=301]
Хотя это и выполняет перенаправление, оно не игнорирует фактические файлы и папки на сервере.
Вот протестированное решение:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.domain\.tld [NC,OR]
RewriteCond %{HTTP_HOST} ^domain\.tld [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewriterule ^(.*)$ http://subdomain.newdomain.tld/$1 [L,R=301]
Строки 3 и 4 сообщают apache применять правило, когда запрос идет с www или без него, без учета заглавных или строчных букв. В !-f
и !-d
в концах строк 5 и 6 соответственно говорят apache избегать применения перенаправления к существующим файлам и каталогам.
Вы можете сделать это с помощью Apache mod_rewrite
, что позволяет перенаправлять запросы с помощью RewriteRule
директива. Вы можете сделать это условным для существующего файла, используя RewriteCond
директива. В документация по mod_rewrite вероятно, хорошее место для начала.