2015-09-04 2 views
0

Я новичок .htaccess и regex. У меня есть скрипт, который работает локально, но когда я загружаю его на живой сервер, он вызывает бесконечный цикл. Как я могу это исправить? На сайте, когда вы загружаете http://example.com, если вы не прошли проверку, он принимает вас в http://example.com/auth/ для формы входа, иначе он отображает содержимое http:///example.com/index.php. Он работает нормально локально, но когда я загружаюсь на живой сервер, он не может найти auth.php, поэтому он перенаправляется на индексную страницу и, поскольку пользователь не аутентифицирован, он отправляет auth.php, таким образом, бесконечный цикл. Пожалуйста помоги. Благодарю..htaccess вызывает бесконечный цикл на живом сервере, но работает на localhost

Это мой файл

Options -Indexes 
Options -MultiViews  
Options +FollowSymLinks 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/ 

    # remove php extensions (only for GET method) 
    RewriteCond %{THE_REQUEST} ^GET\ /(.+)\.php(?:\?|\s) [NC] 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule^%1/? [L,R=301] 

    # don't touch other existing files/folders 
    RewriteCond %{REQUEST_FILENAME} -f [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule^- [L] 

    # force trailing slash 
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
    RewriteRule ^(.+)$ $1/ [L,R=301] 

    # rewrite extensionless php files 
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
    RewriteRule ^(.+)/$ $1.php [L] 

    #rewrite path to file eg http://example.com/auth/recover to http://example.com/auth.php?a=recover 
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
    RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?a=$2 [QSA,L] 

    RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1.php?a=$2&id=$3 [QSA,L] 

    # finally, if not found 
    RewriteRule^index.php [L] 
</IfModule> 
+0

Отсутствие комментариев ??? В самом деле??? Спасибо alot – sammyukavi

ответ

0

Вы можете изменить порядок правил:

Options +FollowSymLinks -MultiViews -Indexes 

<IfModule mod_rewrite.c> 
    DirectoryIndex index.php 
    RewriteEngine On 
    RewriteBase/ 

    # remove php extensions (only for GET method) 
    RewriteCond %{THE_REQUEST} ^GET\ /(.+)\.php(?:\?|\s) [NC] 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule^%1/? [L,R=301] 

    # don't touch other existing files/folders 
    RewriteCond %{REQUEST_FILENAME} -f [OR] 
    RewriteCond %{REQUEST_FILENAME} -d [OR] 
    RewriteCond %{ENV:REDIRECT_STATUS} \d 
    RewriteRule^- [L] 

    # force trailing slash 
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
    RewriteRule ^(.+?[^/])$ $1/ [L,R=301] 

    RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1.php?a=$2&id=$3 [QSA,L] 

    #rewrite path to file eg http://example.com/auth/recover to http://example.com/auth.php?a=recover 
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
    RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?a=$2 [QSA,L] 

    # rewrite extensionless php files 
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
    RewriteRule ^(.+?)/$ $1.php [L] 

    # finally, if not found 
    RewriteRule . index.php [L] 
</IfModule> 
+0

Still looping. Сайт размещен на godaddy – sammyukavi

+0

GoDaddy sometime не поддерживает htaccess. Другой проблемой может быть расположение .htaccess. Почему 'auth.php' не найден? – anubhava

+0

.htaccess и auth.php находятся в той же папке, которая является корневой папкой, из которой я обслуживаю свои веб-страницы, мои htdocs. Сайт является субдоменом на гостевой учетной записи godaddy. – sammyukavi