alibek Posted July 29, 2022 · Report post Снова rewrite работает по неясным правилам. Не подскажите, что не так? Нужно запросы вида .../tv24/auth?... передавать в скрипт /tv24.php. Есть такой набор правил в htaccess: RewriteCond %{REQUEST_URI} ^/api/.*$ RewriteRule ^api/v([0-9]+)/(.*)$ /api_v$1.php/$2 [L] RewriteCond %{REQUEST_URI} ^/bitrix24/ RewriteRule ^bitrix24/(.*)$ /bitrix24.php/$1 [L] RewriteCond %{REQUEST_URI} ^/tv24/ RewriteRule ^tv24/(.*)$ /tv24.php/$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L] (в них еще парочка подобных переадресаций). Вроде бы все правильно. Онлайн-отладка тоже показывает, что все правильно. Но на запрос получаю ошибку 404. В логе rewrite.log такое: (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth (3) [perdir /data/sites/portal_api/www/] applying pattern '^api/v([0-9]+)/(.*)$' to uri 'tv24.php/auth' (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth (3) [perdir /data/sites/portal_api/www/] applying pattern '^bitrix24/(.*)$' to uri 'tv24.php/auth' (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth (3) [perdir /data/sites/portal_api/www/] applying pattern '^tv24/(.*)$' to uri 'tv24.php/auth' (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth (3) [perdir /data/sites/portal_api/www/] applying pattern '^(.*)$' to uri 'tv24.php/auth' (4) [perdir /data/sites/portal_api/www/] RewriteCond: input='/data/sites/portal_api/www/tv24.php' pattern='!-f' => not-matched (1) [perdir /data/sites/portal_api/www/] pass through /data/sites/portal_api/www/tv24.php Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
yandrey Posted July 29, 2022 · Report post В 29.07.2022 в 14:33, alibek сказал: /tv24/auth?... прямо так с знаком вопроса, без вопроса тоже ошибка? виртуальный хостинг, поэтому никак без апача? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 29, 2022 · Report post Без вопроса тоже ошибка 404. Без апача никак, потому что сервер старый, на нем много всего и переносить это все довольно проблемно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 29, 2022 · Report post Причем предыдущий набор правил (с bitrix24) работает. А с tv24 не работает, хотя такой же. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted July 29, 2022 · Report post 404 - слишком просто, или нету, или не там лежит, или прав не хватает... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 29, 2022 · Report post В 29.07.2022 в 17:02, alibek сказал: Причем предыдущий набор правил (с bitrix24) работает. Ошибся. Точно так же не работает. Тогда так и не разобрался с причиной, указывал прямой путь к скрипту. Но первое правило с api работает корректно. А оно ничем принципиально не отличается. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ixi Posted July 29, 2022 · Report post В 29.07.2022 в 17:51, alibek сказал: Но первое правило с api работает корректно. В конфиге есть <Location> или <LocationMatch> на него? В 29.07.2022 в 10:33, alibek сказал: (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth Обратите внимание, в самом начале лога адрес уже tv24.php, так что ваши реврайты не срабатывают. Возможно даже, что скрипт всё же вызывается без ожидаемого им аргумента и возвращает 404 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 29, 2022 · Report post В 29.07.2022 в 18:05, ixi сказал: В конфиге есть <Location> или <LocationMatch> на него? Нет. В 29.07.2022 в 18:05, ixi сказал: Обратите внимание, в самом начале лога адрес уже tv24.php Видел, но не понял, откуда ".php" взялся. Проверял через wget: wget -o - "http://....ru/tv24/auth" В ответ получаю 404, в логах сервера то, что выкладывал выше. В конфиге единственное место, где указан "tv24.php" — это правило RewriteRule. Но это правило не срабатывает, иначе бы не было 404. Весь конфиг в спойлере. Скрытый текст <VirtualHost *:80> ServerAdmin webmaster@server.local DocumentRoot "${APACHE_VHOST_DIR}/portal_api/www" <Directory "${APACHE_VHOST_DIR}/portal_api/www"> Options +FollowSymLinks -Indexes IndexIgnore */* Order deny,allow Allow from all AllowOverride None RewriteEngine On RewriteCond %{REQUEST_URI} ^/api/.*$ RewriteRule ^api/v([0-9]+)/(.*)$ /api_v$1.php/$2 [L] RewriteCond %{REQUEST_URI} ^/bitrix24/ RewriteRule ^bitrix24/(.*)$ /bitrix24.php/$1 [L] RewriteCond %{REQUEST_URI} ^/tv24/ RewriteRule ^tv24/(.*)$ /tv24.php/$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L] </Directory> ServerName server.ru DirectoryIndex index.php <Location /bitrix24/> Allow from **.**.**.68 ... Deny from all </Location> <Location /sms.php> Allow from **.**.**.80 ... Deny from all </Location> <Location /telegram.php> Allow from **.**.**.80 ... Deny from all </Location> #RewriteLog "${APACHE_VHOST_DIR}/portal_api/log/rewrite.log" #RewriteLogLevel 8 LogLevel notice ErrorLog "${APACHE_VHOST_DIR}/portal_api/log/error.log" #SetEnv flag-debug #SetEnvIf Remote_Addr "0.0.0.0" flag-debug LogFormat "[%{%F %T}t %{%z}t] %h #%>s %O \"%{Referer}i\" -> \"%r\" \"%{User-Agent}i\" %Dus" details LogFormat "* %{%FT%T}t%{%z}t %Dus %h %H %f\n\t%m %U%q (len %I, \"%{Accept}i\")\n\tHost: %{Host}i\n\tReferer: %{Referer}i\n\tUA: %{User-Agent}i\n\tResponse: %X #%>s (len %O, \"%{Content-Type}o\")\n" debug CustomLog "${APACHE_VHOST_DIR}/portal_api/log/access.log" common #CustomLog "${APACHE_VHOST_DIR}/portal_api/log/details.log" details #CustomLog "${APACHE_VHOST_DIR}/portal_api/log/debug.log" debug env=flag-debug </VirtualHost> Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 29, 2022 · Report post В 29.07.2022 в 18:05, ixi сказал: Возможно даже, что скрипт всё же вызывается без ожидаемого им аргумента и возвращает 404 Нет, в нем такая ошибка не предусмотрена, он может возвращать только 400/401/403. Так что 404 возвращает веб-сервер, а не скрипт. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 30, 2022 · Report post Записал правила так: RewriteCond %{REQUEST_URI} ^/tv24(\.php)?/ RewriteRule ^tv24(\.php)?/(.*)$ /tv24.php?$2 [L] И через wget попробовал загрузить /tv24.php/auth и /tv24/auth . В первом случае скрипт выполнился, во втором 404. В логах в первом случае: [rid#7fec5c27b0a0/initial] (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth [rid#7fec5c27b0a0/initial] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth [rid#7fec5c27b0a0/initial] (3) [perdir /data/sites/portal_api/www/] applying pattern '^api/v([0-9]+)/(.*)$' to uri 'tv24.php/auth' [rid#7fec5c27b0a0/initial] (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth [rid#7fec5c27b0a0/initial] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth [rid#7fec5c27b0a0/initial] (3) [perdir /data/sites/portal_api/www/] applying pattern '^bitrix24/(.*)$' to uri 'tv24.php/auth' [rid#7fec5c27b0a0/initial] (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth [rid#7fec5c27b0a0/initial] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth [rid#7fec5c27b0a0/initial] (3) [perdir /data/sites/portal_api/www/] applying pattern '^tv24(\\.php)?/(.*)$' to uri 'tv24.php/auth' [rid#7fec5c27b0a0/initial] (4) [perdir /data/sites/portal_api/www/] RewriteCond: input='/tv24.php/auth' pattern='^/tv24(\\.php)?/' => matched [rid#7fec5c27b0a0/initial] (2) [perdir /data/sites/portal_api/www/] rewrite 'tv24.php/auth' -> '/tv24.php?auth' [rid#7fec5c27b0a0/initial] (3) split uri=/tv24.php?auth -> uri=/tv24.php, args=auth [rid#7fec5c27b0a0/initial] (1) [perdir /data/sites/portal_api/www/] internal redirect with /tv24.php [INTERNAL REDIRECT] [rid#7fec5c282410/initial/redir#1] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php -> tv24.php [rid#7fec5c282410/initial/redir#1] (3) [perdir /data/sites/portal_api/www/] applying pattern '^api/v([0-9]+)/(.*)$' to uri 'tv24.php' [rid#7fec5c282410/initial/redir#1] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php -> tv24.php [rid#7fec5c282410/initial/redir#1] (3) [perdir /data/sites/portal_api/www/] applying pattern '^bitrix24/(.*)$' to uri 'tv24.php' [rid#7fec5c282410/initial/redir#1] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php -> tv24.php [rid#7fec5c282410/initial/redir#1] (3) [perdir /data/sites/portal_api/www/] applying pattern '^tv24(\\.php)?/(.*)$' to uri 'tv24.php' [rid#7fec5c282410/initial/redir#1] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php -> tv24.php [rid#7fec5c282410/initial/redir#1] (3) [perdir /data/sites/portal_api/www/] applying pattern '^(.*)$' to uri 'tv24.php' [rid#7fec5c282410/initial/redir#1] (4) [perdir /data/sites/portal_api/www/] RewriteCond: input='/data/sites/portal_api/www/tv24.php' pattern='!-f' => not-matched [rid#7fec5c282410/initial/redir#1] (1) [perdir /data/sites/portal_api/www/] pass through /data/sites/portal_api/www/tv24.php [rid#7fec5c2790a0/subreq] (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth [rid#7fec5c2790a0/subreq] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth [rid#7fec5c2790a0/subreq] (3) [perdir /data/sites/portal_api/www/] applying pattern '^api/v([0-9]+)/(.*)$' to uri 'tv24.php/auth' [rid#7fec5c2790a0/subreq] (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth [rid#7fec5c2790a0/subreq] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth [rid#7fec5c2790a0/subreq] (3) [perdir /data/sites/portal_api/www/] applying pattern '^bitrix24/(.*)$' to uri 'tv24.php/auth' [rid#7fec5c2790a0/subreq] (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth [rid#7fec5c2790a0/subreq] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth [rid#7fec5c2790a0/subreq] (3) [perdir /data/sites/portal_api/www/] applying pattern '^tv24(\\.php)?/(.*)$' to uri 'tv24.php/auth' [rid#7fec5c2790a0/subreq] (4) [perdir /data/sites/portal_api/www/] RewriteCond: input='/tv24.php/auth' pattern='^/tv24(\\.php)?/' => matched [rid#7fec5c2790a0/subreq] (2) [perdir /data/sites/portal_api/www/] rewrite 'tv24.php/auth' -> '/tv24.php?auth' [rid#7fec5c2790a0/subreq] (3) split uri=/tv24.php?auth -> uri=/tv24.php, args=auth [rid#7fec5c2790a0/subreq] (1) [perdir /data/sites/portal_api/www/] internal redirect with /tv24.php [INTERNAL REDIRECT] Во втором случае: [rid#7fec5c27f0a0/subreq] (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth [rid#7fec5c27f0a0/subreq] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth [rid#7fec5c27f0a0/subreq] (3) [perdir /data/sites/portal_api/www/] applying pattern '^api/v([0-9]+)/(.*)$' to uri 'tv24.php/auth' [rid#7fec5c27f0a0/subreq] (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth [rid#7fec5c27f0a0/subreq] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth [rid#7fec5c27f0a0/subreq] (3) [perdir /data/sites/portal_api/www/] applying pattern '^bitrix24/(.*)$' to uri 'tv24.php/auth' [rid#7fec5c27f0a0/subreq] (3) [perdir /data/sites/portal_api/www/] add path info postfix: /data/sites/portal_api/www/tv24.php -> /data/sites/portal_api/www/tv24.php/auth [rid#7fec5c27f0a0/subreq] (3) [perdir /data/sites/portal_api/www/] strip per-dir prefix: /data/sites/portal_api/www/tv24.php/auth -> tv24.php/auth [rid#7fec5c27f0a0/subreq] (3) [perdir /data/sites/portal_api/www/] applying pattern '^tv24(\\.php)?/(.*)$' to uri 'tv24.php/auth' [rid#7fec5c27f0a0/subreq] (4) [perdir /data/sites/portal_api/www/] RewriteCond: input='/tv24.php/auth' pattern='^/tv24(\\.php)?/' => matched [rid#7fec5c27f0a0/subreq] (2) [perdir /data/sites/portal_api/www/] rewrite 'tv24.php/auth' -> '/tv24.php?auth' [rid#7fec5c27f0a0/subreq] (3) split uri=/tv24.php?auth -> uri=/tv24.php, args=auth [rid#7fec5c27f0a0/subreq] (1) [perdir /data/sites/portal_api/www/] internal redirect with /tv24.php [INTERNAL REDIRECT] Понятия не имею, откуда он во втором случае берет tv24.php, этот ресурс я нигде не запрашиваю. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ixi Posted August 1, 2022 · Report post В 29.07.2022 в 19:37, alibek сказал: В конфиге единственное место, где указан "tv24.php" — это правило RewriteRule. А что-нибудь глобальное вне VirtualHost или в .htaccess? раньше было популярно что-то вроде RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php Кстати, можно попробовать [L] на [END] поменять, от множества повторов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted August 1, 2022 · Report post Глобальных правил нет. Подозреваю, что может быть у меня старый апач (2.2.22) и не понимает макрос REQUEST_FILENAME. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ixi Posted August 2, 2022 · Report post В 01.08.2022 в 12:45, alibek сказал: 2.2.22 Тогда про Options -MultiViews не забывайте Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...