alibek Posted July 29, 2022 Posted July 29, 2022 Снова 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
yandrey Posted July 29, 2022 Posted July 29, 2022 В 29.07.2022 в 14:33, alibek сказал: /tv24/auth?... прямо так с знаком вопроса, без вопроса тоже ошибка? виртуальный хостинг, поэтому никак без апача? Вставить ник Quote
alibek Posted July 29, 2022 Author Posted July 29, 2022 Без вопроса тоже ошибка 404. Без апача никак, потому что сервер старый, на нем много всего и переносить это все довольно проблемно. Вставить ник Quote
alibek Posted July 29, 2022 Author Posted July 29, 2022 Причем предыдущий набор правил (с bitrix24) работает. А с tv24 не работает, хотя такой же. Вставить ник Quote
YuryD Posted July 29, 2022 Posted July 29, 2022 404 - слишком просто, или нету, или не там лежит, или прав не хватает... Вставить ник Quote
alibek Posted July 29, 2022 Author Posted July 29, 2022 В 29.07.2022 в 17:02, alibek сказал: Причем предыдущий набор правил (с bitrix24) работает. Ошибся. Точно так же не работает. Тогда так и не разобрался с причиной, указывал прямой путь к скрипту. Но первое правило с api работает корректно. А оно ничем принципиально не отличается. Вставить ник Quote
ixi Posted July 29, 2022 Posted July 29, 2022 В 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
alibek Posted July 29, 2022 Author Posted July 29, 2022 В 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
alibek Posted July 29, 2022 Author Posted July 29, 2022 В 29.07.2022 в 18:05, ixi сказал: Возможно даже, что скрипт всё же вызывается без ожидаемого им аргумента и возвращает 404 Нет, в нем такая ошибка не предусмотрена, он может возвращать только 400/401/403. Так что 404 возвращает веб-сервер, а не скрипт. Вставить ник Quote
alibek Posted July 30, 2022 Author Posted July 30, 2022 Записал правила так: 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
ixi Posted August 1, 2022 Posted August 1, 2022 В 29.07.2022 в 19:37, alibek сказал: В конфиге единственное место, где указан "tv24.php" — это правило RewriteRule. А что-нибудь глобальное вне VirtualHost или в .htaccess? раньше было популярно что-то вроде RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php Кстати, можно попробовать [L] на [END] поменять, от множества повторов. Вставить ник Quote
alibek Posted August 1, 2022 Author Posted August 1, 2022 Глобальных правил нет. Подозреваю, что может быть у меня старый апач (2.2.22) и не понимает макрос REQUEST_FILENAME. Вставить ник Quote
ixi Posted August 2, 2022 Posted August 2, 2022 В 01.08.2022 в 12:45, alibek сказал: 2.2.22 Тогда про Options -MultiViews не забывайте Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.