Правило перезаписи .htaccess для сопоставления определенной строки запроса с контроллером. - PullRequest
0 голосов
/ 29 ноября 2010

Попытка взломать следующее:

/any/segment/?zone=116&n-value=a128c471

.. для сопоставления с контроллером /controller/ads.php, но чтобы убедиться, что ads.php REQUEST_URI и QUERY_STRING остались прежними (без перенаправлений).

При условии, конечно, следуя;

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !((.*)\.(.*))$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/?%{QUERY_STRING} [NC,L,R=301]

Буду признателен за любой совет.

1 Ответ

0 голосов
/ 29 ноября 2010
  1. URL не выполнит ваше третье условие. mod_rewrite игнорирует строку запроса; он увидит косую черту в конце URL.

  2. Нет необходимости вручную добавлять (дословно) строку запроса в конец.

  3. Вам необходимо изменить строку замены, используемую правилом перезаписи, и удалить флаг R=301. В зависимости от того, какие URL используются на вашем сайте, может потребоваться более конкретное регулярное выражение в левой части (или другое условие), чтобы исключить URL, которые вы не хотите переписывать.

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !((.*)\.(.*))$
    RewriteRule ^(.*)$ /controller/ads.php [NC,L]
    
...