我相信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以下的任何内容。
是否只能为文件夹而不是其内容(指定的文件除外)实现重定向?
答案 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
之类的内容不会匹配,因为正则表达式表示/
必须位于结尾