Назад | Перейти на главную страницу

Почему я не могу перенаправить URL-адреса с «index.html» в файл php?

Я застрял в большой проблеме, но позвольте мне начать с одной ее части.

Я не понимаю, почему это работает:

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]