Я видел, как эта проблема возникала у других людей, но в их случаях была проблема с их регулярным выражением. Быстрая поездка на regexpal.com показала мне, что это не так. У меня есть простой файл htaccess, который позволяет мне записывать URL-адреса в формате «.htm» или «.html», а не «.php». Я недавно обнаружил, что у этого сценария есть проблемы при работе со строками запроса (? Аргумент = значение). Вот мой полный код .htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html?\??(.*)$ $1.php?$2 [nc]
Когда я печатаю строку запроса своего запроса, она всегда оказывается пустой, и, конечно же, проверка array_key_exists не находит идентификатор, который я пытаюсь указать. Я мало работаю с Apache, но я думал, что это будет довольно просто.
Если это важно, этот htaccess применяется поверх относительно простой настройки XAMPP. Не думаю, что я вообще что-то сделал с файлом httpd.conf. Я могу попытаться предоставить любую другую информацию, которая, по мнению людей, может быть актуальной.
Упростите это:
RewriteRule ^(.*)\.html?\??(.*)$ $1.php?$2 [nc]
К этому:
RewriteRule (.*)\.html?$ $1.php [NC,QSA]
Начальный ^
не нужно, так как .*
уже соответствует чему-либо. А сохранение строки запроса вручную - это (а) проблематично и (б) совершенно нелогично, поскольку Флаг QSA (добавление строки запроса) будет обрабатывать все это внутренне.