Я новичок в использовании .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>
Эта проблема была исправлена путем простого комментирования некоторых строк, из-за которых сервер добавлял корневой каталог, в результате чего запрашиваемый сценарий не был найден. Рабочий сценарий приведен ниже.
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>