我有以下.htaccess文件:
AddDefaultCharset utf-8
RewriteEngine on
Options +SymLinksIfOwnerMatch
RewriteBase /
# redirect all www-requests to no-www
# -
RewriteCond %{HTTP_HOST} ^www\.site\.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]
# redirect all home pages to / (root)
# -
RewriteCond %{THE_REQUEST} ^.*/index\.(php|html?)
RewriteRule ^(.*)index\.(php|html?)$ /$1 [R=301,L]
# remove trailing slash from dirs
# -
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ /$1 [R=301,L]
# automatically add index.php when needed
# -
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|login\.php|reg\.php|robots\.txt|css/|js/)
RewriteRule ^(.*)$ /index.php [L]
.htaccess文件应该执行以下操作(对于SEO):
http://www.site.com
应变为http://site.com
)http://site.com/me/
应重定向http://site.com/me
index.php/index.html
的所有URI都应转换为空:http://site.com/admin/index.php
或http://site.com/admin/
最终应显示为http://site.com
然而,当前版本的.htaccess在尝试访问时会导致循环重定向(http://site.com/admin
)。应由浏览器提取的真实文档为http://site.com/admin/index.php
。
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
有一个名为 mod_dir 的模块会自动加载,它会导致对缺少尾部斜杠的目录的请求被重定向到一个尾部斜杠。您可以使用DirectorySlash
指令将其关闭,但请在关闭时注意安全警告。如果您将其关闭并且默认索引不会加载,则会出现信息泄露安全问题。但是,你的拉特规则(看起来像)它会这样做,虽然不正确。
首先,关闭DirectorySlash
DirectorySlash Off
然后您需要将最后一条规则更改为:
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule ^(.*)$ /$1/index.php [L]