我要实现
www.example.com/test/ rewrite to www.example.com/example.com/test/ www.example.com/ rewrite to www.example.com/example.com/
我可以用这个重写configuration来做到这一点:
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ RewriteCond %{REQUEST_URI} !^/example.com(.*) RewriteCond %{REQUEST_URI} ^(.*)/$ RewriteRule ^(.*) /example.com/$1 [L]
但是我也想redirect,而不用斜杠:
www.example.com/test redirect to www.example.com/example.com/test/ www.example.com/ redirect to www.example.com/example.com/
我已经试过这个:
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ RewriteCond %{REQUEST_URI} !^/example.com(.*) RewriteCond %{REQUEST_URI} !^(.*)/$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*[^/])$ $1/ [R=301,L]
但不起作用,它redirect到:
IE: http://www.example.com/C:/wamp/www/test/ Firefox: http://www.example.com/C:/wamp/www/example.com/test/
你知道这个解决scheme吗(没有触及mod-dir conf)?
我find了解决办法:
Options +FollowSymLinks RewriteEngine On # Fix missing trailing slashes. RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteCond %{DOCUMENT_ROOT}/_l_/example\.com%{REQUEST_URI}/ -d RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L] # Rewrite sub domains. RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^(.*)$ /_l_/example\.com/$1 [QSA,L]
感谢您的回答。
尝试
RewriteCond C:/wamp/www%{REQUEST_FILENAME} !-f
要么
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
另请参见“mod_rewrite中的REQUEST_FILENAME有什么用?
我不知道“C:”来自哪里的浏览器 – 更有用的诊断是从HTTP响应中find“Location”标题 – 使用Firebug,LiveHTTPHeaders或者telnet来获取。
另外,考虑到你的第二个RewriteRule根本没有提到“example.com”,我想你的httpd.conf中有两个RewriteRules。
如果是这样的话,那么第一条规则结尾处的[L]修饰符就是停止第二条规则的执行。
为什么不使用这个?
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ RewriteCond %{REQUEST_URI} !^/example.com(.*) RewriteRule ^(.*) /example.com/$1 [L]