Попытка добавить параметр запроса с помощью .htaccess - PullRequest
0 голосов
/ 18 октября 2019

Во-первых, я пытаюсь добавить параметр запроса i = jplx на любой URI, который ссылается на изображение.

И в первых двух тестах ниже он работает, как ожидалось.

Однако, когда я пытаюсь добавить команды, которые оба добавят параметр i = jplx, а также преобразуют uri для передачи в качестве параметра (index.php? Q = system / files / & i = jplx), следующие два теста (3 и 4)) не возвращаться, как ожидалось.

Я использовал это для тестирования: https://htaccess.madewithlove.be

Любые идеи о том, что я не так в командах htaccess?

Test 1

https://some.com/sites/default/files/Slide074.png

RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteRule ^(.*)$ $1?i=jplx [QSA]

Result 1 - as expected

https://some.com/sites/default/files/Slide074.png?i=jplx

...

Test 2

https://some.com/sites/default/files/Slide074.png?abc

RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteRule ^(.*)$ $1?i=jplx [QSA]

Result 2 - as expected

https://some.com/sites/default/files/Slide074.png?i=jplx&abc

...

Test 3

https://some.com/sites/default/files/Slide074.png

RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteRule ^(.*)$ $1?i=jplx [QSA]

RewriteCond %{REQUEST_URI} !^/sites/default/files/js/
RewriteCond %{REQUEST_URI} !^/sites/default/files/css/
RewriteRule ^sites/default/files/(.*)$ index.php?q=system/files/$1 [L,QSA]

Result 3

https://some.com/index.php?q=system/files/Slide074.png

Expected 3

https://some.com/index.php?q=system/files/Slide074.png&i=jplx

...

Test 4

https://some.com/sites/default/files/Slide074.png?abc

RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteRule ^(.*)$ $1?i=jplx [QSA]

RewriteCond %{REQUEST_URI} !^/sites/default/files/js/
RewriteCond %{REQUEST_URI} !^/sites/default/files/css/
RewriteRule ^sites/default/files/(.*)$ index.php?q=system/files/$1 [L,QSA]

Result 4

https://some.com/index.php?q=system/files/Slide074.png&abc

Expected 4

https://some.com/index.php?q=system/files/Slide074.png&i=jplx&abc

1 Ответ

0 голосов
/ 23 октября 2019

Флаг L имеет тенденцию к перезапуску цикла операции перезаписи. Вместо этого используйте флаг END:

RewriteCond %{REQUEST_URI} !^/sites/default/files/js/
RewriteCond %{REQUEST_URI} !^/sites/default/files/css/
RewriteRule ^sites/default/files/(.*)$ index.php?q=system/files/$1 [END,QSA]
                                                                    ###

(из теста 4)

Если вы включаете ведение журнала ошибок с уровнем debug rewrite:trace8, а grep для перезаписи apache показывает все шаги, которые он проходитвот выдержка (+ переформатирование для читабельности), показывающая эффект флага END:

[rewrite:trace2] [pid ...] mod_rewrite.c(483): [client 127.0.0.1:49538] 127.0.0.1 - - [127.0.0.1/sid#555c63b3f410]
    [rid#555c63bbb6e0/initial] [perdir /usr/local/apache2/htdocs/] 
        rewrite 'sites/default/files/Slide074.png/default/files/Slide074.png'
            -> 'index.php?q=system/files/Slide074.png/default/files/Slide074.png'
[rewrite:trace3] [pid ...] mod_rewrite.c(483): [client 127.0.0.1:49538] 127.0.0.1 - - [127.0.0.1/sid#555c63b3f410]
    [rid#555c63bbb6e0/initial] 
        split uri=index.php?q=system/files/Slide074.png/default/files/Slide074.png 
            -> uri=index.php, args=q=system/files/Slide074.png/default/files/Slide074.png&i=jplx&ab
[rewrite:trace3] [pid ...] mod_rewrite.c(483): [client 127.0.0.1:49538] 127.0.0.1 - - [127.0.0.1/sid#555c63b3f410]
    [rid#555c63bbb6e0/initial] [perdir /usr/local/apache2/htdocs/]
        add per-dir prefix: index.php -> /usr/local/apache2/htdocs/index.php
[rewrite:trace8] [pid ...] mod_rewrite.c(483): [client 127.0.0.1:49538] 127.0.0.1 - - [127.0.0.1/sid#555c63b3f410]
    [rid#555c63bbb6e0/initial] [perdir /usr/local/apache2/htdocs/] 
        Rule has END flag, no further rewriting for this request

Общая информация: Ваш вопрос напомнил мне более ранний ответ, предоставленный мной на сайте Mod_Rewrite неожиданнофлаг поведения L .

...