分派器上的Apache重写规则

我怎样才能做一个重写规则http://example.com/abc重写/redirect到http://example.com/abc.html但它应该工作时,我的URL为http://example.com/abc/def.html 。 目前,当我redirect 301 "abc" "abc.hml" ,第二个URL也redirect到http://example.com/abc.html/def.html

我目前的规则。

 <IfModule rewrite_module> RewriteEngine On RewriteRule ^/$ /content/aaa-123/abc.html [PT,L] RewriteRule ^/index.html$ /content/aaa-123/abc.html [PT,L] RedirectMatch ^/abc$ /abc.html RewriteCond %{REQUEST_URI} !^/(.*)/$ RewriteCond %{REQUEST_URI} !^(.*)\.(.*)$ RewriteRule ^/(.*)$ /content/$1/ [L] RewriteRule \.(css|jpe?g|gif|png|js)$ - [L] ErrorDocument 404 /errors/404.html <IfModule mod_expires.c> ExpiresActive on ExpiresByType image/jpg "access 1 year" ExpiresByType image/jpeg "access 1 year" ExpiresByType image/gif "access 1 year" ExpiresByType image/png "access 1 year" ExpiresByType text/css "access 1 month" ExpiresByType text/html "access 1 month" ExpiresByType application/pdf "access 1 month" ExpiresByType text/x-javascript "access 1 month" ExpiresByType text/css "access plus 1 year" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType image/x-icon "access 1 year" ExpiresDefault "access 1 month" </IfModule> <IfModule mod_headers.c> <FilesMatch "\.(js|css|xml|gz)$"> Header append Vary: Accept-Encoding </FilesMatch> </IfModule> 

目前,当我redirect 301 "abc" "abc.hml" ,第二个URL也redirect到http://example.com/abc.html/def.html

mod_alias Redirect指令是前缀匹配 ,它解释了你不希望的redirect。

而且,不要混合来自mod_alias(即RedirectMatchRedirect )和mod_rewrite(即RewriteRule )的Redirect 。 由于它们是不同的模块,所以它们在不同的时间执行(通常是mod_rewrite),不pipe显示的顺序如何,所以最终会产生令人困惑的冲突。

在服务器configuration中尝试以下内容, /abc内部重写/abc.html

 RewriteRule ^/abc$ /abc.html [L] 

但是,如果/abc是文件系统上的物理目录,则会遇到问题,因为mod_dir通常会尝试通过附加斜杠来“修复”URL。 所以,你需要使尾部斜线可选:

 RewriteRule ^/abc/?$ /abc.html [L] 

另外,如果已启用MultiViews ,请禁用它:

 Options -MultiViews 

MultiViews (mod_negotiation的一部分)做同样的事情(内部重写/abc/abc.html/abc.php或任何它发现),但会 mod_rewrite获得机会之前执行。

这对我有效。 有人帮我在这个网站。

 Options -MultiViews RewriteEngine On RewriteRule ^/abc/?$ /abc.html [NC,L,R=302] RewriteRule \.(css|jpe?g|gif|png|js)$ - [L,NC] RewriteRule ^/(index\.html)?$ /content/aaa-123/abc.html [PT,L,NC] RewriteCond %{REQUEST_URI} !^/(.*)/$ RewriteCond %{REQUEST_URI} !^(.*)\.(.*)$ RewriteRule ^/(.*)$ /content/$1/ [L]