make .htaccess以防止导航到目录

时间:2017-07-06 12:12:14

标签: apache .htaccess web server wamp

我有.htaccess

DirectorySlash On
RewriteEngine On

RewriteRule /?\.htaccess$ - [F,L]

# Remove trailing slash
RewriteRule ^(.*)/$ /project/$1 [R,L]

# Map every link to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/project/index.php.*$
RewriteRule ^(.*)$ /project/index.php?___MYROUTER=$1 [QSA,END]

但是当我导航到我的.htaccess文件旁边的目录之一,例如浏览器中的css文件夹时,使用以下地址:

  

http://localhost/project/css

然后我的地址将更改为:

  

http://localhost/project/css?___MYROUTER=css&___MYROUTER=css&___MYROUTER=css&___MYROUTER=css&___MYROUTER=css&___MYROUTER=css&___MYROUTER=css&___MYROUTER=css&___MYROUTER=css&___MYROUTER=css

在firefox中这就是结果:

  

页面未正确重定向

     

Firefox检测到服务器正在重定向请求   这个地址永远不会完成。

This problem can sometimes be caused by disabling or refusing to accept cookies.

但是那些没有指向现有目录的其他地址就像是:

  

http://localhost/project/mycontroller

此地址没问题,不会更改为其他任何内容

我的.htaccess有什么问题?

这是我的log文件

1 个答案:

答案 0 :(得分:0)

这是因为Apache在mod_dir模块完成执行后在目录前添加了一个尾部斜杠。

您可以使用单独的规则在目录前添加尾部斜杠。

DirectorySlash On
RewriteEngine On

RewriteRule /?\.htaccess$ - [F,L]

# Remove trailing slash for non directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /project/$1 [R,L]

# add a trailing slash to directories
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]


# Map every link to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/project/index\.php [NC]
RewriteRule ^(.*)$ project/index.php?___MYROUTER=$1 [QSA,END]