我希望通过查询字符串将域,子域和请求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=%2&sub=%1&req=$1 [QSA,END]
以下是一些工作示例:
http://dev.testdomain.tld/hello/world
=> /index.php?app=testdomain&sub=dev&req=/hello/world
和
http://www.example.tld/?var=test
=> /index.php?app=example&sub=www&req=/&var=test
但如果我有这样的事情:
http://dev.testdomain.tld/hello/world?app=FAIL&sub=FAIL&req=FAIL
=> /index.php?app=testdomain&sub=dev&req=/hello/world&app=FAIL&sub=FAIL&req=FAIL
查询字符串将使用FAIL
(或来自url查询字符串的所有其他内容)替换域,子域和请求uri 变量。
我可以取消激活[QSA]
标志,但我想保留原始查询字符串,并阻止app, sub, req
变量重写。
答案 0 :(得分:0)
您可以从查询字符串中删除app,sub和req参数,并使用PHP $_SERVER
var。这个PHP超全局包含一些有趣的值来解决您的问题:
http://dev.testdomain.tld/hello/world?app=FAIL&sub=FAIL&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。