我对我的重定向规则感到有些困惑。比起长篇演讲更好的例子就是大丑:
IndexIgnore *
ErrorDocument 404 http://www.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^([^\.]+)\.example\.com$ http://example.com/private/$1/public/si.php [L]
我的目标是获取子域([^\.]+)
并在重定向中使用它而不是$1
。
例如,test.example.com
应重定向到http://example.com/private/test/public/si.php
感谢您的帮助。
此致 S上。
最终工作htaccess:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{REQUEST_URI} !^/private/
RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC]
RewriteRule ^ /private/%1/public/$1 [R=301,L]
将anysub.example.com/anypage
重定向到anysub.example.com/private/anysub/public/anypage
答案 0 :(得分:2)
用于匹配RewriteRule
模式的字符串将从不包含主机名,仅包含URI且不包含任何查询字符串。如果要忽略实际的URI是什么,那么RewriteRule
中的模式不需要匹配任何内容。您需要使用%符号反向引用RewriteCond
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC]
RewriteRule ^ http://example.com/private/%1/public/si.php [L]
您可以在规则的方括号中添加R=301
标记,以使重定向成为永久性。
答案 1 :(得分:1)
尝试重写条件反向引用:
RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC]
RewriteRule ^.*$ http://example.com/private/%1/public/si.php [L]