Я застрял в большой проблеме, но позвольте мне начать с одной ее части.
Я не понимаю, почему это работает:
RewriteRule ^(.*)index.html $1 [R=301,L]
пока это не так:
RewriteCond %{REQUEST_FILENAME} index\.html [NC]
RewriteRule ^(.*) main.redirect.php [QSA,L]
И этот тоже не работает:
RewriteRule ^(.*)index.html main.redirect.php [NC,QSA,L]
Любые идеи?
Я использую это как часть основной проблемы, когда клиент хочет, чтобы я выполнял только одно перенаправление для одного или всех следующих условий
Чтобы добиться этого, я создал файл php, который делает все это за один раз, и мне нужно вызвать его при любом из приведенных выше условий (тогда файл php выполнит перенаправление):
<?php
$sURL = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
echo '$sURL = ' . $sURL . '<br />';
$sURL = strtolower($sURL);
if (substr($sURL, 0, 4) != 'www.') {
$sURL = 'www.' . $sURL;
}
if (substr($sURL, -10) == 'index.html') {
$sURL = substr($sURL, 0, -10);
}
echo 'Location: http://' . $sURL;
#header('Location: http://' . $sURL, true, 301);
?>
(эхо-строки предназначены для тестирования, они будут удалены, а команда header () будет активирована позже)
В файле .htaccess у меня теперь есть следующее (сразу после "RewriteEngine On" и "Options + FollowSymlinks":
# 2014-07-16 RM: Exclude these files from rewriting
RewriteRule \.(js|ico|gif|jpg|jpeg|png|css|pdf)$ - [NC,QSA,L]
# 2014-07-16 RM: Check if the url starts with www
RewriteCond %{HTTP_HOST} ^mydomain\.com [NC]
RewriteRule ^(.*) main.redirect.php [QSA,L]
# 2014-07-16 RM: Check if the url ends with index.html
# RewriteCond %{SCRIPT_FILENAME} ^(.*)index\.html$ [NC]
# RewriteRule ^(.*) main.redirect.php [QSA,L]
RewriteRule ^(.*)index.html main.redirect.php [NC,QSA,L]
# 2014-07-16 RM: Check if the url contains upper-case characters
# RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]
# RewriteRule ![A-Z] - [E=HASCAPS:FALSE,S=1]
# RewriteCond %{ENV:HASCAPS} TRUE
# RewriteRule ^(.*) main.redirect.php [QSA,L]
Любая помощь приветствуется!
С уважением
Рене
РЕДАКТИРОВАТЬ:
Я сократил часть .htaccess до нескольких строк, но даже в этом случае только www-check работает должным образом:
RewriteCond %{HTTP_HOST} ^mydomain\.com [NC,OR]
RewriteCond %{REQUEST_URI} ^(.*)/index\.html$ [NC,OR]
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule ^(.*) main.redirect.php [QSA,L]
Я не тестировал это, однако первое, что я заметил, это то, что в ваших строках RewriteRule, которые выглядят так:
RewriteRule ^(.*) main.redirect.php [QSA,L]
Вы должны попробовать добавить косую черту перед main.redirect.php, так как эта часть правила перенаправления должна быть URL-адресом, поэтому он будет выглядеть следующим образом:
RewriteRule ^(.*) /main.redirect.php [QSA,L]