0

我有点坚持我的重定向规则。比长篇演讲更好的小例子,这里是大丑:

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/anypageanysub.example.com/private/anysub/public/anypage

4

2 回答 2

2

用于匹配 a 模式的字符串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在规则的方括号中添加一个标志以使重定向永久化。

于 2012-12-28T00:42:41.743 回答
1

尝试重写条件反向引用:

RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC]
RewriteRule ^.*$ http://example.com/private/%1/public/si.php [L]
于 2012-12-27T23:41:19.217 回答