условие перезаписи restfull htaccess не применяется

У меня есть небольшая проблема с пониманием правила. Это должно работать, но я думаю, что я упускаю что-то. Справка прилагается 🙂

Правило:

<IfModule mod_rewrite.c>
  Options -MultiViews
  RewriteEngine On
  RewriteCond %{REQUEST_URI}

I have a bit of a understanding problem with a rule. It should work but i think i am missing somthing. Help is Appriciated :)

Rule:

<IfModule mod_rewrite.c>
  Options -MultiViews
  RewriteEngine On
  RewriteCond %{REQUEST_URI}$1 ^(.*?/)(.*)2$
  RewriteRule ^(.*)$ - [E=BASE:%1]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule   %{ENV:BASE}^(.+)/(w+?)/(w+?)$       %{ENV:BASE}handler.php?path=$1&class=$2&method=$3 [L,QSA]

</IfModule>

It shold convert this url:

http://sccatdev.office.dig/deploy/ajax/Approval/Article/test

to
http://sccatdev.office.dig/deploy/ajax/handler.php?path=Approval&class=Artile&method=test together with posts and gets.

But it semms im missing somthing. The .htaccess is located in the ajax folder.

^(.*?/)(.*)$
RewriteRule ^(.*)$ - [E=BASE:%1]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule %{ENV:BASE}^(.+)/(w+?)/(w+?)$ %{ENV:BASE}handler.php?path=

I have a bit of a understanding problem with a rule. It should work but i think i am missing somthing. Help is Appriciated 🙂

Rule:

<IfModule mod_rewrite.c>
  Options -MultiViews
  RewriteEngine On
  RewriteCond %{REQUEST_URI}$1 ^(.*?/)(.*)2$
  RewriteRule ^(.*)$ - [E=BASE:%1]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule   %{ENV:BASE}^(.+)/(w+?)/(w+?)$       %{ENV:BASE}handler.php?path=$1&class=$2&method=$3 [L,QSA]

</IfModule>

It shold convert this url:

http://sccatdev.office.dig/deploy/ajax/Approval/Article/test

to
http://sccatdev.office.dig/deploy/ajax/handler.php?path=Approval&class=Artile&method=test together with posts and gets.

But it semms im missing somthing. The .htaccess is located in the ajax folder.

&class=&method= [L,QSA]

</IfModule>

IT shold convert this url:

http://sccatdev.офис.dig / deploy/ajax/утверждение / статья/Тест

к
http://sccatdev.офис.dig / deploy/ajax / handler.php?path=утверждение & class=Artile & method=test вместе с posts и gets.

But it im missing somthing. Этот.htaccess находится в папке ajax.

1 ответ

  1. Есть несколько вопросов:

    1. %{ENV:BASE} быть переменной env не может использоваться в шаблоне перезаписи
    2. RewriteRule URI соответствия шаблону относительно текущего каталога, а не полного соответствия пути.

    Если .htaccessнаходится внутри ajaxпапки, то вам даже не нужна %{ENV:BASE}переменная для перезаписи. Просто используйте following .htaccess:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ handler.php?path=
    	

    There are few issues:

    1. %{ENV:BASE} being an env variable cannot be used in rewrite pattern
    2. RewriteRule pattern match URI relative to current directory, not the full path match.

    If .htaccess is located inside ajax folder then you don't even need %{ENV:BASE} variable to rewrite. Just use following .htaccess:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ handler.php?path=$1&class=$2&method=$3 [L,QSA]
    

    &class=&method= [L,QSA]