#php #apache #.htaccess #mod-rewrite
#php #apache #.htaccess #мод-перезапись
Вопрос:
Я бы хотел переписать URL-адреса, передав домен, поддомен и запросить uri в php-файл с помощью строки запроса со следующим .htaccess
# Apache configuration
Options -Indexes
Options -Multiviews
Options FollowSymLinks
# Rewrite engine configuration
RewriteEngine on
RewriteBase /
# Sub domain redirection (301 redirect)
RewriteCond %{HTTP_HOST} ^([^.] .[^.0-9] )$
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
# Request redirection
RewriteCond %{HTTP_HOST} ^([^.] ).([^.] ).[^.0-9] $
RewriteRule ^(.*)$ index.php?app=%2amp;sub=%1amp;req=$1 [QSA,END]
Вот несколько рабочих примеров :
http://dev.testdomain.tld/hello/world
=> /index.php?app=testdomainamp;sub=devamp;req=/hello/world
И
http://www.example.tld/?var=test
=> /index.php?app=exampleamp;sub=wwwamp;req=/amp;var=test
Но если у меня есть что-то вроде этого :
http://dev.testdomain.tld/hello/world?app=FAILamp;sub=FAILamp;req=FAIL
=> /index.php?app=testdomainamp;sub=devamp;req=/hello/worldamp;app=FAILamp;sub=FAILamp;req=FAIL
Строка запроса заменит переменные домена, поддомена и uri запроса FAIL
на (или все остальное из строки запроса url).
Я мог бы [QSA]
отключить флаг, но я хотел бы сохранить исходную строку запроса и предотвратить app, sub, req
перезапись переменных.
Ответ №1:
Вы можете удалить параметры app, sub и req из строки запроса и использовать PHP $_SERVER
var. Этот суперглобальный PHP содержит несколько интересных значений для решения вашей проблемы:
http://dev.testdomain.tld/hello/world?app=FAILamp;sub=FAILamp;req=FAIL
var_dump($_SERVER);
Приведет к следующему выводу:
array(...) {
["HTTP_HOST"]=>
string(13) "test.test.tld"
["QUERY_STRING"]=>
string(9) "hahah=w12"
["REQUEST_URI"]=>
string(28) "/~stejanse/tst.php?hahah=w12"
}
Вы могли бы использовать эти переменные для извлечения вашей информации вместо использования mod_rewrite .