我是htaccess的新手。
我做了一个会计系统,其中子域名代表相应的文件夹。
这意味着:如果url是abc.ucounting.com,那么肯定有一个命名为abc的文件夹。
现在我的要求是,如果有人输入任何错误的网址如abc123并且没有任何文件夹命名abc123那么这将重定向到错误页面。
到目前为止我做了:
ServerName vhosts.ucounting.com
ServerAlias *.ucounting.com
DocumentRoot /data/www/uc/ucountingnew_test
VirtualDocumentRoot /data/www/uc/ucountingnew_test
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/user_company/* !-d
RewriteRule . http://www.ucounting.com/error/error_account_not_found [L]
</IfModule>
我几乎接近解决方案。我需要获取子域名,以便我可以将其放在rewriteCond而不是*
请在这个问题上帮助我。
答案 0 :(得分:1)
您可以使用%{HTTP_HOST}
找到当前域。
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com$
RewriteCond %{DOCUMENT_ROOT}/%1/ !-d
RewriteRule ^ http://www.example.com/error/error_account_not_found [R,L]
第一个条件匹配主机与正则表达式。第一个捕获组([^\.]+)
匹配主域名之前的所有内容。您可以使用%1
从最后一行使用捕获组。供你参考。可以使用$1
引用同一行上的捕获组。单个^
匹配字符串的开头,因此匹配任何请求,其中单个.
将匹配至少1个字符的任何请求。我使用[R,L]
作为标志,以明确它是一个外部重定向,即使第二个参数中的http://domainname
使其成为重定向。