我将我的网站移动到新的php 5.2服务器,无法访问apache conf文件 所以我不得不将网站的重写规则放入.htaccess(通配符对域开放) 我现在已经解决了很多问题
原来是
Options +FollowSymLinks
rewriteEngine on
rewriteCond $1 !^pages/
rewriteCond %{HTTP_HOST} !^www\.mydomain\.com
rewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com
rewriteRule (.*) /pages/%1/$1
rewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /pages/
rewriteRule ^pages/([^/]+)/(.*)$ http://$1.mydomain.com/$1 [R=301,L]
我需要做出哪些改变?
重点是我需要重定向:
www.mydomain.com/pages/XXXXX.php
==>
XXXXX.mydomain.com/...whatever....
但也
www.mydomain.com/pages/XXXXX/...whatever....
==> XXXXX.mydomain.com/...whatever....
答案 0 :(得分:0)
以下规则应该按照您的要求执行。
但是,在第一个示例中,whatever
出现在www.mydomain.com/pages/XXXXX.php
的原始请求中的哪个位置。
如果whatever
引用查询字符串,那么它应该可以工作。
RewriteCond %{HTTP_HOST} ^www\.mydomain\.com$ [NC]
#redirect www.mydomain.com/pages/XXXXX.php to XXXXX.mydomain.com/
RewriteRule ^pages/(.+)\.php http://$1.mydomain.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.mydomain\.com$ [NC]
#redirect www.mydomain.com/pages/XXXXX/.whatever.. to XXXXX.mydomain.com/...whatever
RewriteRule ^pages/([^/]+)/(.*) http://$1.mydomain.com/$2 [R=301,L]
答案 1 :(得分:0)
您可以尝试以下方法:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^pages/
RewriteRule ^pages/([^/]+)(?:\.php|/(.*))$ http://$1.mydomain.com/$2 [R=301,L]
RewriteCond %{REQUEST_URI} !^pages/
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com
RewriteRule (.*) /pages/%1/$1 [L]
</IfModule>
还有一个:请确保您是否真的需要Options +FollowSymLinks
指令,因为如果不允许或已经在httpd.conf中设置了这可能会导致内部错误