即使重定向匹配适用,.htaccess也会重写

时间:2014-12-25 05:23:33

标签: apache .htaccess mod-rewrite

我迁移到新域名,现在使用.PHP而不是经典.ASP。 我成功设置了.htaccess,将所有旧的.ASP请求重定向到.PHP请求。但是,无法获得重定向的根默认文档。

这是我的.htaccess文件的一个例子。

RewriteEngine on    
RedirectMatch ^(.*).asp http://newdomain.com$1.php
# RewriteRule ^(.*)$ http://newdomain.com/$1

使用.htaccess看起来如上所述(第二行注释掉),请求

http://olddomain.com 

只显示旧域名。但深层文件可以按照我的意愿工作。例如。请求

http://olddomain.com/somefile.asp 

将转到

http://newdomain/somefile.php

如果我取消注释第二行,root现在可以正确重定向,但其他一切都搞砸了。例如。请求

http://olddomain.com/somefile.asp 

只会改写为:

http://newdomain/somefile.asp 

(而不是.php)

所以我希望第1行优先,只有第2行才能应用

http://olddomain.com

我调查并发现可能在第1行末尾添加[L]是我的答案。但是,当我这样做时,我得到500 - 内部服务器错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您将RedirectMatch mod_alias规则与mod_rewrite规则混合在一起。试试这个:

RewriteEngine on 

RewriteRule ^(.+?)\.asp$ http://newdomain.com/$1.php [L,NC,R=302]
RewriteRule ^(.*)$ http://newdomain.com/$1 [L,R=302]