В основном я хочу перенаправить все запросы в свой домен на определенную страницу. Например, перенаправьте все запросы на страницу X, если вы уже не находитесь на странице X, и в этом случае вам нужно просто загрузить ее. Но мои решения просто создают бесконечный цикл: /
Я попытался...
RewriteCond %{REQUEST_URI} !=/underconstruction.html
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !^/underconstruction.html
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
Проблема с приведенными выше примерами заключается в том, что строки RewriteRule не перенаправляют на underconstruction.html, они снова перенаправляют примерно на тот же URL (поскольку $ 1 соответствует (. *)).
В этом примере 301 перенаправляет все URL-адреса на "/underconstruction.html":
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/underconstruction.html
RewriteRule ^ /underconstruction.html [R=301]
(что переводится как «Если URI не /underconstruction.html, перенаправить на /underconstruction.html»)
Из того, что вы описали, вы хотите, чтобы правило перезаписи было больше похоже:
RewriteRule ^(.*)$ $LINK [L,R=301]
Другими словами, потеряйте 1 доллар. При этом исходный URL-адрес присоединяется к новому URL-адресу, что приводит к бесконечному циклу.
(Я не проверял условия, но я думаю, что одно из них должно работать)
Как насчет
<VirtualHost *:80>
...
RedirectMatch !^/underconstruction.html http://yourdomain/underconstruction.html
...
</VirtualHost>