我有一个奇怪的apache mod_rewrite问题。我需要隐藏用户的子目录,但是将每个请求重定向到该子目录。我在stackoverflow上发现了几个非常相似的问题,但没有什么真的适合,所以我决定发布一个新问题。
我的.htaccess看起来像这样:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)?$ foo/$1 [QSA,L]
document-root只包含以下文件夹/文件:
/foo/bar/index.html
我现在希望example.com/bar和example.com/bar/只显示index.html的内容。
而不是example.com/bar/按预期显示内容,但example.com/bar会将301重新定向到example to example.com/bar/foo/,然后显示内容。我真的不明白为什么在这种情况下有301重定向。
当我把这件事放进去时
RewriteCond %{REQUEST_URI} !^[^.]*/$ RewriteCond %{REQUEST_URI} !^[^.]*\.html$ RewriteCond %{REQUEST_URI} !^[^.]*\.php$ RewriteRule ^(.*)$ $1/ [QSA,L]
在该规则之上似乎有效,但这需要我列出每个使用过的文件扩展名......
有没有其他方法可以省略重定向,外部用户永远不会看到文件夹“bar”。
提前致谢!
答案 0 :(得分:0)
第一个重写规则是从/ foo /(。)重定向到($ 1),第二个 - 从(。)重定向到$ 1.
只是想法,这还没有经过测试。
答案 1 :(得分:0)
迟到总比不上......
使用一个简单的RewriteRule,它会为每个没有的URL添加/。
# only directories
RewriteCond %{REQUEST_FILENAME} !-f
# exclude there directories
RewriteCond %{REQUEST_URI} !^/excluded-dirs
# exclude these extensions
RewriteCond %{REQUEST_URI} !\.excluded-extension$
# exclude request that already have a /
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]