#php #html #apache #.htaccess #mod-rewrite
#php #HTML #apache #.htaccess #мод-перезапись
Вопрос:
Я переписал URL с помощью .htaccess, чтобы он выглядел красивее. Но когда я добавляю строку запроса к этому URL, ключи и не видны из PHP.
В моем файле .htaccess я попробовал несколько способов устранить проблему, но ничего не сработало.
RewriteEngine On
[some code]
RewriteRule ^([a-zA-Z0-9_-] )/?$ ?site=$1
Я попробовал эту перезапись, чтобы посмотреть, работает ли она:
RewriteRule ^search?q=g ?site=searchamp;q=g
Но если я print_r($_GET)
использую PHP, я просто получу Array ( [site] => search )
Попробуйтеhttp://kwtsports.bplaced.de/search?q=g .
У меня есть поле поиска, которое перенаправляет на /search?q=blablaSearchQuery
, но, как я уже сказал, $_GET['q']
пустое.
Это также не работает:
RewriteRule ^search?q=([a-zA-Z0-9_-] )/?$ ?site=searchamp;q=$1
Кто-нибудь знает, почему это происходит?
Ответ №1:
Добавьте [QSA]
в конец вашего RewriteRule
. При этом к результату добавляется старая строка запроса.
Смотрите документы для получения дополнительной информации.
Ответ №2:
Кто-нибудь знает, почему это происходит?
ДА. Вы не можете протестировать строку запроса в правиле перезаписи, поэтому эта часть вашего правила никогда не будет работать: RewriteRule ^search?q=g
.
Если вы хотите протестировать строку запроса, вы должны протестировать ее в rewrite cond.
Например, для вашего RewriteRule ^search?q=g?site=searchamp;q=g
примера вам пришлось бы сделать что-то вроде этого:
RewriteCond %{QUERY_STRING} ^q=([^amp;] )
RewriteRule ^search/?$ site=searchamp;q=%1 [L]
В данном конкретном случае, поскольку вы не хотите изменять q
значение, нам на самом деле не нужно его тестировать, и вы можете просто передать его с помощью QSA
опции после добавления site=search
:
RewriteRule ^search/?$ site=search [L,QSA]