使用rewriteengine忽略htaccess重定向

时间:2012-12-11 11:57:28

标签: apache .htaccess mod-rewrite redirect

我有一个htaccess问题,我认为这可能是如此简单(愚蠢?)以前没有人不得不问过它。我从使用html页面转换为php,并且大部分以下工作:

<IfModule mod_rewrite.c>
 Options +FollowSymlinks
 RewriteEngine on
 RewriteRule ^(.+)\.htm$ /htmlrewrite.php?page=$1 [R=301,NC,L]
</IfModule>

虽然有几个例外,所以我假设推杆:

Redirect 301 /oldpage.htm http://example.com/newpage.php
在IfMofule之上的

......会做到这一点,但事实并非如此。除非删除其余代码,否则将忽略“重定向301”。有人能告诉我我做错了吗?

TIA。

2 个答案:

答案 0 :(得分:0)

Apache首先处理mod_rewrite(重写*),然后处理mod_alias(重定向)。

使用RewriteCond阻止/oldpage.htm由mod_rewrite处理。

RewriteCond %{REQUEST_URI} !^/oldpage\.htm$
RewriteRule ^(.+).htm$ /htmlrewrite.php?page=$1 [R=301,NC,L]

或使用RewriteRule代替Redirect

RewriteRule ^oldpage\.htm$ http://example.com/newpage.php [L,R=301]
RewriteRule ^(.+).htm$ /htmlrewrite.php?page=$1 [R=301,NC,L]

答案 1 :(得分:0)

您正在使用mod_rewrite和mod_alias,它们都被应用于同一个URL。你应该坚持使用mod_rewrite或mod_alias。

mod_rewrite :(删除Redirect指令)

<IfModule mod_rewrite.c>
 Options +FollowSymlinks
 RewriteEngine on
 RewriteRule ^oldpage.htm$ http://example.com/newpage.php [R=301,L]
 RewriteRule ^(.+)\.htm$ /htmlrewrite.php?page=$1 [R=301,NC,L]
</IfModule>

mod_alias :(删除<IfModule mod_rewrite.c>块中的所有内容:

Options +FollowSymlinks
Redirect 301 /oldpage.htm http://example.com/newpage.php
RedirectMatch 301 ^/(.+)\.htm$ /htmlrewrite.php?page=$1