我有一个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。
答案 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