Jump to content

Recommended Posts

Posted

Снова 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

 

Posted
В 29.07.2022 в 14:33, alibek сказал:

/tv24/auth?...

прямо так с знаком вопроса, без вопроса тоже ошибка?

виртуальный хостинг, поэтому никак без апача?

Posted

Без вопроса тоже ошибка 404.

Без апача никак, потому что сервер старый, на нем много всего и переносить это все довольно проблемно.

Posted

404 - слишком просто, или нету, или не там лежит, или прав не хватает...

Posted
В 29.07.2022 в 17:02, alibek сказал:

Причем предыдущий набор правил (с bitrix24) работает.

Ошибся.

Точно так же не работает.

Тогда так и не разобрался с причиной, указывал прямой путь к скрипту.

 

Но первое правило с api работает корректно.

А оно ничем принципиально не отличается.

Posted
В 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

Posted
В 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>

 

 

Posted
В 29.07.2022 в 18:05, ixi сказал:

Возможно даже, что скрипт всё же вызывается без ожидаемого им аргумента и возвращает 404

Нет, в нем такая ошибка не предусмотрена, он может возвращать только 400/401/403.

Так что 404 возвращает веб-сервер, а не скрипт.

Posted

Записал правила так:

        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, этот ресурс я нигде не запрашиваю.

Posted
В 29.07.2022 в 19:37, alibek сказал:

В конфиге единственное место, где указан "tv24.php" — это правило RewriteRule.

А что-нибудь глобальное вне VirtualHost или в .htaccess? раньше было популярно что-то вроде

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

 

Кстати, можно попробовать [L] на [END] поменять, от множества повторов.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.