mod_rewrite代码返回错误的域名,将符号链接更改为实际

时间:2011-04-21 00:40:08

标签: apache .htaccess mod-rewrite

我在同一个网站上有两个域名。

我的网站上有一个页面,我希望看起来来自第二个域(在此示例中,它是 example2.com/pagex )。除root和pagex外,对 example2.com 的所有其他请求都应重定向到 example1.com

由于下面显示的mod_rewrite规则,我网站上的所有网页都显示为目录,但实际上只是 index.php?page = pagename

这是我的.htaccess文件:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www\.)?example2\.com [NC]
RewriteCond %{REQUEST_URI} !^/$ #Do not redirect root
RewriteCond %{REQUEST_URI} !^/pagex/ #Do not redirect pagex
RewriteRule ^(.*)$ http://www.example1.com/$1 [R=301]

# If the file or folder does not exist, send to index.php as variable
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ /index.php?page=$1 [L]

转到 example2.com/pagex / 运行上述代码我将重定向到 www.example1.com/index.php?page=pagex 。第二个条件应该失败,阻止重定向。更奇怪的是虚拟目录已被实际路径取代。

1 个答案:

答案 0 :(得分:1)

您可以这样编写规则:

RewriteEngine on
Options +FollowSymlinks -MultiViews

RewriteCond %{HTTP_HOST} ^(www\.)?example2\.com [NC]
RewriteCond %{THE_REQUEST} !/pagex/? [NC]
RewriteRule ^(.+)$ http://www.example1.com/$1 [R=301,L]

# If the file or folder does not exist, send to index.php as variable
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ /index.php?page=$1 [L]

上面的代码http://example2.com/pagex/被正确地重定向到http://example2.com/index.php?page=pagex