我想将访问者重定向到我的主域,当他们在我的子域上执行请求后跟不匹配的URI。
例如,访问者可以访问sub.domain.com/product/10
处的资源,但当他尝试访问与我的子域domain.com
不匹配的其他资源时,应将其重定向到product/:id
,如sub.domain.com/anOtherResource
1}}。
我必须使用apache重写模块执行此操作。我发现!
运算符可以完成这项工作,但它对我不起作用。
这是我的.htaccess文件的重写配置:
RewriteCond %{HTTP_HOST} sub\.domain\.com
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
RewriteRule ^(.*)$ http://www.domain.com [L,R]
我也测试了这个配置:
RewriteCond %{HTTP_HOST} sub\.domain\.com
RewriteRule !^/product/[0-9]+$ http://www.domain.com [L,R]
我不知道错误在哪里......
[编辑]
.htaccess文件是为Wordpress配置的。这是整个.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} sub.domain.com
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
答案 0 :(得分:4)
问题出在Wordpress Rewrite配置中,发生了什么事?
我在sub.domain.com/product/1上执行请求,因此不匹配这些RewriteCond:
RewriteCond %{HTTP_HOST} sub.domain.com
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
然后,不重定向到www.domain.com
继续重写到下一个Cond(Worpdress重写):
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
在此步骤中,它会将内部重定向(未发送到客户端)发送到sub.domain.com/index.php
由于重定向,它再次应用了之前的RewriteCond
RewriteCond %{HTTP_HOST} sub.domain.com
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R]
匹配 Cond,然后将客户端重定向到www.domain.com
,而我却没想到。
我通过在index.php上添加RewriteCond来解决问题,如下所示:
RewriteCond %{HTTP_HOST} sub.domain.com
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R]
现在它管理由Worpress重写发送的内部重定向。
答案 1 :(得分:0)
重写规则看起来不错,但请尝试以下方法:
RewriteCond %{HTTP_HOST} ^sub[.]domain[.]com$
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
RewriteRule ^(.*)$ http://www.domain.com [L,R]
如果这不起作用,那么您可能需要复制并粘贴VirtualHost配置的全部内容,因为它可能是其他导致问题的原因。