RewriteRule Apache - 仅针对目录而不是针对其中的文件进行重定向

时间:2015-11-09 20:06:34

标签: apache .htaccess mod-rewrite

我相信this question可能很接近,但我对mod_rewrite很新,请原谅我,如果这是基本的话。

我需要将请求重定向到特定文件夹及其默认页面,允许所有其他请求按指定继续。例如:

只应重写这些网址:

http://example.com/abc
http://example.com/abc/
http://example.com/abc/index.html

...让我们对http://example.org

...但是,应该允许以下请求:

http://example.com/abc/anotherpage.html
http://example.com/abc/subdir
http://example.com/abc/subdir/
http://example.com/abc/subdir/index.html

我尝试了以下内容......

RewriteRule ^/abc/ http://example.org/ 
RewriteRule ^/abc/index.html http://example.org/ 

...但是第一次重写会以递归方式运行并重定向abc以下的任何内容。

是否只能为文件夹而不是其内容(指定的文件除外)实现重定向?

2 个答案:

答案 0 :(得分:1)

试试这个:

RewriteCond %{REQUEST_URI} ^/abc/index.html [OR]
RewriteCond %{REQUEST_URI} ^/abc$ [OR]
RewriteCond %{REQUEST_URI} ^/abc/$
RewriteRule ^(.*)$ http://your.domain/ [L,R]

答案 1 :(得分:1)

尝试在正则表达式的末尾添加$分隔符,以表明它是匹配项的 end

RewriteRule ^/abc/$ http://example.org/ 
RewriteRule ^/abc/index.html$ http://example.org/ 

您也可以将两者合并为:

RewriteRule ^/?abc/(?:index\.html|)$ http://example.org/ [L,R]

或使用mod_alias而不是mod_rewrite:

RedirectMatch ^/abc/(?:index\.html|)$ http://example.org/

使用$/abc/123 之类的内容不会匹配,因为正则表达式表示/必须位于结尾