我正在为我的网站开发动态子域,到目前为止,我想出的ReWrite代码是:
RewriteRule ^.+\:\/\/?([a-zA-Z0-9]+)\.{1}.+\.{1}.+\/?([a-zA-Z0-9]*)?\/?([a-zA-Z0-9]*)?\/?([a-zA-Z0-9]*)?$ /app.php?var1='$1'&var2='$2'&var3='$3'&var4='$4' 当我在http://regexpal.com的regex测试器中测试它时,这就是我得到的
我的模拟输入是:http://testuser.testdomain.com/test/this/out
我的回报是:app.php?var1='testuser'&var2=''&var3=''&var4=''
我期待的是:app.php?var1='testuser'&var2='test'&var3='this'&var4='out'
你可以看到我在做什么:RegExPal工具RewriteRule
编辑:
我不太理解RewriteCond,到目前为止我有这样的理解:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)?/?([a-zA-Z0-9]+)?/?([a-zA-Z0-9]+)?/?([a-zA-Z0-9]+)?$ app.php?content=$1&id=$2&selector=$3&action=$4
RewriteRule ^([a-zA-Z0-9]+)?/?([a-zA-Z0-9]+)?/?([a-zA-Z0-9]+)?/?([a-zA-Z0-9]+)?/?$ app.php?content=$1&id=$2&selector&$3&action=$4
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^(.+://{1}){1}([a-zA-Z0-9]+).{1}([a-zA-Z0-9]+.{1}[a-zA-Z0-9]+/){1}([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?/?([a-zA-Z0-9]*)?$ $1$3app.php?&content=$4&id=$5&selector=$6&action=$7第一个条件是子目录未被设置,该子目录当前正在工作。我还在做的第二个条件是,我不知道如何使用RewriteCond,也找不到能很好地解释它的文档。
发布于 2015-12-08 02:43:42
您试图在RewriteRule中匹配太多,它本身只接收路径test/this/out,而不接收协议或主机。要从主机捕获子域,首先必须将%{HTTP_HOST}与%1变量匹配为RewriteCond,然后匹配RewriteRule中的路径段。
注意,我使用表达式(:?([^.]+)\.)?来捕获点之前的部分作为子域。外部的(:?)确保点本身不会在%1中捕获到\.。
更新和重写为一条规则:
经过一些实验,我想出了如何用一个非常复杂的表达式来完成这个任务。它使用相同的RewriteCond匹配模式将子域捕获到%1中,但是用类似于(?:([^/]+)(?:/|$))?的表达式替换路径段。
具体如下:
^ RewriteRule接收到的字符串的开始(路径)(?:不捕获整个结构的变量([^/]+)捕捉下一个/之前的所有内容(但不包括它)(?:不要捕捉接下来要发生的事./|$ ...可以是斜杠,也可以是字符串$的末尾。)关闭该斜杠或尾匹配组。)关闭整个结构的外部组?并使整件事情可选上面的全部内容将匹配第一个路径段(在您的示例test中是/test/this/out)。然后再重复两次来捕获另外两个变量。
再加上RewriteCond条件和子域匹配,看起来就像;
RewriteCond %{REQUEST_FILENAME} !-d
# Added condition for negative match on existing files
RewriteCond %{REQUEST_FILENAME} !-f
# Case-insensitive host match captures the subdomain into %1
# Using [^.]+ to match everything up to the first dot
# using a non-capturing outer group so the dot isn't grabbed
RewriteCond %{HTTP_HOST} ^(?:([^.]+)\.)?test\.com [NC]
# Match each segment optionally into $1,$2,$3
RewriteRule ^(?:([^/]+)(?:/|$))?(?:([^/]+)(?:/|$))?(?:([^/]+)(?:/|$))? index.php?subdomain='%1'&var2='$1'&var3='$2'&var4='$3' [L]如果您可能有需要追加的其他查询字符串参数,请将[QSA]标志添加到其中每一个的末尾,如[L,QSA]中的那样。
RewriteCond...
https://stackoverflow.com/questions/34146780
复制相似问题