@nikita2585

Почему возникает ошибка .htaccess со знаком $ (конец строги)?

htaccess-файл:

RewriteEngine On

RewriteBase /

# Редирект с http на https создан автоматически при заказе бесплатного ssl-сертификата
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
# Конец редиректа

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteRule ^channel/([^/]+)/edit edit/card.php?id=$1 [L,QSA]
RewriteRule ^channel/([^/]+)/ channel.php?id=$1 [L,QSA]

ErrorDocument 404 /errors/404.php


С этим кодом открывается страница /channel/53089/, однако так же открывается и /channel/53089/jhkjhj/, и /channel/53089/jhkjhj/sdfkjshfdkjshfd/. То есть конец строки вообще не имеет значения

Заменяю код
RewriteEngine On

RewriteBase /

# Редирект с http на https создан автоматически при заказе бесплатного ssl-сертификата
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
# Конец редиректа

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteRule ^channel/([^/]+)/edit edit/card.php?id=$1 [L,QSA]
RewriteRule ^channel/([^/]+)/$ channel.php?id=$1 [L,QSA]

ErrorDocument 404 /errors/404.php


То есть добавляю $ только RewriteRule ^channel/([^/]+)/$ channel.php?id=$1 [L,QSA]

И всё перестаёт работать не открывается ни страница /channel/53089/, ни /channel/53089/jhkjhj/sdfkjshfdkjshfd/.

Почему перестаёт работать /channel/53089/?
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ответы на вопрос 2
Ломается вот из-за этой конструкции:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

Если её убрать, то всё работает.
С ней сообщение в логе:
AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

Собственно, частью про 'LogLevel debug' я и рекомендую Вас воспользоваться для удовлетворения любопытства
Ответ написан
Комментировать
@dodo512
Перенести RewriteRule ^channel выше RewriteRule ^(.*)$ $1.php

RewriteEngine On

RewriteBase /

# Редирект с http на https создан автоматически при заказе бесплатного ssl-сертификата
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
# Конец редиректа

RewriteRule ^channel/([^/]+)/edit edit/card.php?id=$1 [L,QSA]
RewriteRule ^channel/([^/]+)/$ channel.php?id=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

ErrorDocument 404 /errors/404.php


Или поменять условие RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteEngine On

RewriteBase /

# Редирект с http на https создан автоматически при заказе бесплатного ssl-сертификата
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
# Конец редиректа

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)$ $1.php [L]

RewriteRule ^channel/([^/]+)/edit edit/card.php?id=$1 [L,QSA]
RewriteRule ^channel/([^/]+)/$ channel.php?id=$1 [L,QSA]

ErrorDocument 404 /errors/404.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы