Сделайте apache2 для обслуживания файлов с такой строкой запроса, как имена - PullRequest
1 голос
/ 11 марта 2011

У меня есть несколько файлов, названных как "index.php? Page = 1", "news? Id = 1".Как настроить apache для отправки именно этих файлов с запросами типа "http://site.com/index.php?page=1"," http://site.com/news?id=1" и т. Д. Я пробовал .htaccess rules

RewriteRule ^(.*)$ $1 [L,QSA]

Не работает.

1 Ответ

1 голос
/ 11 марта 2011

Вы должны закодировать специальные символы ? и = в URL, который используется для запроса.


Например, если ваш файл называется strange.php?plop=1, тогда ваш URL должен быть:

http://tests/temp/strange.php%3Fplop%3D1

В PHP это можно сделать с помощью функции urlencode().



Редактировать после комментария: в этом случае (что на самом деле нехорошо ...) , решение может заключаться в использовании правила переписывания, подобного этому:

RewriteRule .*    temp.php

Это перенаправит все на temp.php.

Там вы можете поработать с чем-то в $_SERVER, чтобы найти запрос.


Например, если я позвоню по этому адресу:

http://tests/temp/strange.php?plop=1

И используйте эту часть кода в моем temp.php:

var_dump($_SERVER);

Я получаю этот вывод:

array
  ...
  'SERVER_NAME' => string 'tests' (length=5)
  'SERVER_ADDR' => string '127.0.0.1' (length=9)
  'SERVER_PORT' => string '80' (length=2)
  ...
  'REDIRECT_QUERY_STRING' => string 'plop=1' (length=6)
  'REDIRECT_URL' => string '/temp/strange.php' (length=17)
  ...
  'QUERY_STRING' => string 'plop=1' (length=6)
  'REQUEST_URI' => string '/temp/strange.php?plop=1' (length=24)
  'SCRIPT_NAME' => string '/temp/temp.php' (length=14)
  ...

Итак, я думаю, я мог бы перестроить имя файла, используя $_SERVER['REQUEST_URI'].

...