Необычное поведение Htaccess URL-Rewrite

0

Я использую jQuery Autocomplete (выборка из базы данных) и вывод результатов пользователю из базы данных. Результаты поиска можно щелкнуть, и при нажатии они отправляются на страницу с именем product_display.php с идентификатором в качестве параметра запроса. Поэтому пример, это было бы примерно так: - product_display.php? Id = 2

На странице product_display.php есть 3 переключателя и 3 формы (по одному для каждого переключателя, формы открываются динамически при выборе радио). Каждая форма имеет отдельную кнопку отправки. После нажатия submit, он переходит на другую страницу и печатается значение скрытой переменной с именем cond.

Все работало нормально, пока я не ввел Url-Rewrite в свой файл htaccess, чтобы конвертировать * product_display.php? Id = 2 * в /products/2

Когда этот url-rewrite пришел на работу, результаты были не очень хорошими. Как только я нажимаю кнопку отправки для любой формы, относящейся к любому переключателю, она снова отображает параметры, которые были на странице product_display (но заголовок показывает другую страницу). Как это можно исправить.

jQuery Auto Complete.

<script>
  $(function() {
    function log( message ) {
      $( "<div>" ).text( message ).prependTo( "#log" );
      $( "#log" ).scrollTop( 0 );
    }

    $( "#birds" ).autocomplete({
      source: "search.php",
      minLength: 2,
      select: function( event, ui ) {


        log( ui.item ? "Selected: " + ui.item.value + " aka " + ui.item.label :
          "Nothing selected, input was " + this.actor );
         window.location.href = './products/' + ui.item.value;
         //window.location.href = 'product_display.php?id=' + ui.item.value;
       // document.testForm.action = "pretravel.php?id="+ui.item.value;
        //document.testForm.submit();
      }
    });
  });

products_display.php

<div id="credit-card">
        <section id="content">


     <input type="radio" id="radio1" name="radios" value="radio1" checked>
   <label for="radio1">Working</label>

<input type="radio" id="radio2" name="radios" value="radio2">
   <label for="radio2">Working - Damaged</label>

    <input type="radio" id="radio3" name="radios" value="radio3">
   <label for="radio3">Not Working</label>

            <form action="offer_show.php" method="post" id="working">
<input type="hidden" name="cond" value="working" id="cond">
<input type="submit" name="submit">
            </form>

    <form action="offer_show.php" method="post" id="workingdamaged">        
DEbit Card payment here
<input type="hidden" name="cond" value="workingdamaged" id="cond">
<input type="submit" name="submit">
    </form>



    <form action="offer_show.php" method="post" id="nonworking">
                <input type="hidden" name="cond" value="damaged" id="cond">
                      <input type="submit" name="submit">
            </form>




        </section>

    </div>


</body>

<script type="text/javascript">
var radios = document.getElementsByName("radios");
var working =  document.getElementById("working");
var workingdamaged =  document.getElementById("workingdamaged");
var nonworking =  document.getElementById("nonworking");
working.style.display = 'block';   // show
workingdamaged.style.display = 'none';
nonworking.style.display = 'none';// hide
for(var i = 0; i < radios.length; i++) {
    radios[i].onclick = function() {
        var val = this.value;
        if(val == 'radio1')
        {
            working.style.display = 'block';
            workingdamaged.style.display = 'none';
            nonworking.style.display = 'none';
        }
        else if(val == 'radio2')
        {
            working.style.display = 'none';
            workingdamaged.style.display = 'block';
            nonworking.style.display = 'none';
        }
        else if(val == 'radio3')
        {
            working.style.display = 'none';
            workingdamaged.style.display = 'none';
            nonworking.style.display = 'block';
        }    

    }
}
</script>

Htaccess

RewriteRule ^products/(.+)$ product_display.php?id=$1 [L,QSA]

offer_show.php (страница, которая открывается после нажатия кнопки)

<?php
echo $_REQUEST['cond'];



?>
  • 0
    Ничего страшного, но вы, вероятно, должны изменить свой RewriteRule на это (в начале): ^products/(\d+)$ чтобы разрешить только цифры в поле идентификатора. Семантически правильный и помогает снова защитить SQL-инъекцию, так как вы не можете написать код инъекции только с цифрами.
  • 0
    Работал отлично. Спасибо, что прочитали этот пост полностью. Мне просто интересно, пойдет ли кто-нибудь через такой длинный пост :)
Показать ещё 1 комментарий
Теги:
.htaccess

1 ответ

2
Лучший ответ

Это, вероятно, относительный/абсолютный URL-адрес. Ваша форма имеет это как действие:

action="offer_show.php"

что означает, что когда вы переходите к: /products/123, форум отправляется в /products/offer_show.php, который переписывается в /product_display.php?id=offer_show.php.

Попробуйте изменить действие формы на абсолютный URL:

action="/offer_show.php"    

И вы также можете добавить

<base href="/" />

на ваш заголовок страницы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню