Ну вот и ответ. Если ты запрашиваешь http://localhost/search.html?query=432 тогда RewriteCond должен быть следущим:
RewriteCond %{QUERY_STRING} ^query=([0-9]+)$
а если http://localhost/search.html?q=432, тогда
RewriteCond %{QUERY_STRING} ^q=([0-9]+)$
ок. тогда все по шагам:
Вот как все примерно должно быть настроено, чтобы все работало )
Настройки httpd.conf в Apache:
<VirtualHost 127.0.0.1:80> RewriteEngine On RewriteLogLevel 4 RewriteLog "c:/localhost/logs/rewrite.log" DocumentRoot "c:/localhost/html" <Directory c:/localhost/html > AllowOverride All Order deny,allow Allow from all </Directory> </VirtualHost>
В c:/localhost/html должны лежать файлы: .htaccess и index.php (контент файлов выше). Также должен быть создан каталог c:/localhost/logs для хранения лога mod_rewrite.
Перегружаем Apache, в браузере вбиваем http://127.0.0.1/search.html?q=111
и получаем
array(2) { ["mode"]=> string(6) "search" ["q"]=> string(3) "111" }
Если что, то лезем в лог реврайта и смотрим, что не так.
Остальные правила не влияют на это преобразование. Копаем дальше :)
Какой url запрашиваешь (полностью)?
И если есть доступ к логам mod_rewrite, то что в них пишется?
Тогда все должно работать в лучшем виде 😕 В .htaccess еще есть какие-нибудь директивы?
Файлы .htaccess и index.php находятся в одном каталоге?
Тогда либо mod_rewrite не подключен, либо не существует файл index.php
Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} ^q=([0-9]+)$ RewriteRule ^search\.html$ index.php?mode=search&q=%1 [L]
И создай файл index.php с содержанием <?php print_r($_GET); ?> и положи его в тот же каталог где и .htaccess.
Попробуй так:
RewriteCond %{QUERY_STRING} ^q=([0-9]+)$ RewriteRule ^search\.html$ index.php?mode=search&q=%1 [L]
Используй JOIN для объединения таблиц по cat_id, тем самым сведешь все к одному запросу.
Пиши в .htaccess
ErrorDocument 404 /my_error_page.html
Сделай схожую схему построения статических URL и поставь 301 редирект со старых URL на новые.