Как можно изменить .htaccess файл таким образом, чтобы страница /channel/53089/ открывалась корректно, но при этом не открывались другие варианты строки после числовой части URL (/channel/53089/jhkjhj/ или /channel/53089/jhkjhj/sdfkjshfdkjshfd/)? Как исправить ошибку, которая возникает после добавления символа $ в правило RewriteRule?
Ошибка возникает из-за того, что символ $ в регулярном выражении используется для указания конца строки. Поэтому, если добавить символ $ в правило RewriteRule, то оно будет применяться только к URL, которые точно соответствуют всей строке, но не к URL, которые содержат дополнительные символы после числовой части. Для того чтобы страница /channel/53089/ открывалась корректно, но при этом не открывались другие варианты строки после числовой части URL, можно использовать следующее правило в файле .htaccess: RewriteEngine On RewriteRule ^channel/([0-9]+)/$ /channel/$1/ [L] Это правило будет перенаправлять все URL, которые начинаются с /channel/, за которыми идет числовая часть, и заканчиваются на /, на URL с тем же числовым значением, но с добавлением / в конце. Таким образом, если ввести /channel/53089/jhkjhj/ или /channel/53089/jhkjhj/sdfkjshfdkjshfd/, они не будут перенаправлены, а если ввести /channel/53089/, он будет перенаправлен на /channel/53089/. Также, чтобы избежать ошибки после добавления символа $ в правило RewriteRule, необходимо убедиться, что перед и после символа $ нет лишних пробелов или других символов.
Ломается вот из-за этой конструкции:
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' я и рекомендую Вас воспользоваться для удовлетворения любопытства
Перенести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