2016-10-08 2 views
1

У меня есть PHP файл /var/www/somepath/index.php, который обрабатывает запросыHtaccess внутренний переписан для URL с запросом Params

http://example.com/somepath/?q=query 

Я хотел бы один и тот же файл для обработки запросов к

http://example.com/some/other/path/?q=query 
http://example.com/another/path/?q=query 
http://example.com/yet/another/path/?q=query 

Я не хочу для копирования файла php в несколько мест в файловой системе. Я думал, что использование правил внутренней перезаписи было бы лучшим способом сделать это. Вот то, что я ставлю в топ-уровня .htaccess файл /var/www/.htaccess:

RewriteRule ^some/other/path /somepath/%{QUERY_STRING} [PT] 

Но это не работает. Я получаю 404 для http://example.com/some/other/path/?q=query

Я знаю, что mod_rewrite включен, потому что у меня есть внешние правила перезаписи (301 и 302 переадресации) в тех же файлах .htaccess, и они работают.

ответ

1

Вы можете поместить это правило в качестве первого правила на сайте корневой .htaccess, который будет обрабатывать любой URL с параметром ?q= запроса:

RewriteEngine On 

RewriteCond %{QUERY_STRING} (^|&)q= [NC] 
RewriteRule^somepath/index.php [L] 
+0

Спасибо анубхава. Если пользователь просматривает страницу http://example.com/some/other/path/?q=query, что делает «часть/другой/путь» частью URL-адреса, исчезают? Мы не соответствовали ему как часть правила перезаписи, поэтому он остается в URL-адресе? Или старый URL-адрес полностью уничтожен? Если это так, не будет ли стерта также строка запроса? – George

+0

Это внутренняя переписка, информация не теряется. Если вы проверите '$ _SERVER [" REQUEST_URI "]' он покажет '/ some/other/path /? Q = query',' $ _SERVER ["QUERY_STRING"] 'будет показывать' q = запрос' и, наконец, если вы проверите '$ _SERVER [" SCRIPT_NAME "]' он покажет переписанный путь, т. Е. '/ Somepath/index.php' – anubhava

Смежные вопросы