.htaccess вызывает бесконечный цикл на живом сервере, но работает на локальном хосте [дубликат]

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

Это мой файл

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] #This variable is not supported: %{THE_REQUEST}
   RewriteCond %{REQUEST_FILENAME} -f #This variable is not supported: %{REQUEST_FILENAME}
   RewriteRule ^ %1/? [L,R=301] #This rule was not met because one of the conditions was not met

   # don't touch other existing files/folders
   RewriteCond %{REQUEST_FILENAME} -f [OR] #This variable is not supported: %{REQUEST_FILENAME}
   RewriteCond %{REQUEST_FILENAME} -d [OR] #This variable is not supported: %{REQUEST_FILENAME}
   RewriteCond %{ENV:REDIRECT_STATUS} \d #This variable is not supported: %{ENV:REDIRECT_STATUS}
   RewriteRule ^ - [L] #This rule was not met because one of the conditions was not met

   # force trailing slash
   RewriteCond %{DOCUMENT_ROOT}/$1\.php -f #This variable is not supported: %{DOCUMENT_ROOT}/$1\.php
   RewriteRule ^(.+?[^/])$ $1/ [L,R=301] #This rule was not met because one of the conditions was not met

   RewriteCond %{DOCUMENT_ROOT}/$1.php -f #This variable is not supported: %{DOCUMENT_ROOT}/$1.php
   RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1.php?a=$2&id=$3 [QSA,L]#This rule was not met because one of the conditions was not met

   #rewrite path to file eg http://example.com/auth/recover to http://example.com/auth.php?a=recover
   RewriteCond %{DOCUMENT_ROOT}/$1.php -f #This variable is not supported: %{DOCUMENT_ROOT}/$1.php
   RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?a=$2 [QSA,L] #This rule was not met because one of the conditions was not met

   # rewrite extensionless php files
   RewriteCond %{DOCUMENT_ROOT}/$1.php -f #This variable is not supported: %{DOCUMENT_ROOT}/$1.php
   RewriteRule ^(.+?)/$ $1.php [L] #This rule was not met because one of the conditions was not met

   # finally, if not found
   RewriteRule . index.php [L] #This rule was met, the new url is http://subdomain.example.com/index.php
</IfModule>
-3
задан 4 September 2015 в 14:55
1 ответ

Эта проблема была исправлена ​​путем простого комментирования некоторых строк, из-за которых сервер добавлял корневой каталог, в результате чего запрашиваемый сценарий не был найден. Рабочий сценарий приведен ниже.

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&att=$4 [QSA,L]

       #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
ответ дан 5 December 2019 в 22:02

Теги

Похожие вопросы