Мое правило перезаписи мода таинственным образом обрезает точки в моей строке запроса.
Например, это URL-адрес запроса:
http://mysite/tag/2/Search+For+Articles...
это строка запроса, которую я хочу:
tag=2&clear=Search+For+Articles...
но это то, что я получаю
tag=2&clear=Search+For+Articles
Вот моя конфигурация mod_rewrite
Options -Indexes
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^tag/([^/]*)/([^/]*)(/?)$ f.php?tag=$1&clear=$2 [L,QSA]
Как я могу исправить эту проблему?
Я думаю, проблема может быть в самой конфигурации Apache ... Я создал простой f.php
скрипт на одном из моих серверов Apache2, который просто состоял из следующего:
<pre>
<?php
print_r($_SERVER);
?>
</pre>
Затем я создал .htaccess
файл с точным содержанием, которое вы указали в своем вопросе. Теперь, когда я ударил http://my.server.com/tag/2/Search+For+Articles...
У меня ошибка 404. Однако если бы я назвал это как http://my.server.com/f.php?tag=2&clear=Search+For+Articles...
Я получил ожидаемый результат. Затем я вернулся к своей конфигурации Apache и обнаружил, что в списке каталогов для пути, по которому я работал, AllowOverride None
поэтому я изменил это на AllowOverride All
и попытался /tag/...
URI с префиксом и низкий, и вот, я получил следующий вывод:
Array
(
[REDIRECT_STATUS] => 200
[HTTP_HOST] => my.server.com
[PATH] => /usr/local/bin:/usr/bin:/bin
[DOCUMENT_ROOT] => /var/www
[SERVER_ADMIN] => webmaster@localhost
[SCRIPT_FILENAME] => /var/www/f.php
[REMOTE_PORT] => 35393
[REDIRECT_QUERY_STRING] => tag=2&clear=Search+For+Articles...
[REDIRECT_URL] => /tag/2/Search+For+Articles...
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] => tag=2&clear=Search+For+Articles...
[REQUEST_URI] => /tag/2/Search+For+Articles...
[SCRIPT_NAME] => /f.php
[PHP_SELF] => /f.php
[REQUEST_TIME] => 1313889895
)
Я очистил некоторые переменные, специфичные для моего сервера, но, как вы можете видеть, QUERY_STRING соответствует ожиданиям.