Apache appends trailing slash to my rewrite rule

我们两清 提交于 2020-01-11 11:52:29

问题


I have clean path with the same name as existing directory.

I use these .htaccess rules to support clean path for the path:

RewriteCond ${REQUEST_URI} ^/mydir
RewriteCond ${REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

everything works correctly (I have a "mydir" clean path working and I can access existing files in the /mydir directory directly), but apache appends the trailing slash all the time to requests. I request http://domain.com/mydir, and it redirects me 301 to http://domain.com/mydir/.

What is the reason?


回答1:


Trailing slash after /mydir/ is added by an Apache module called mod_dir that adds a trailing slash after all the directories. This is due to this setting turned on by default:

DirectorySlash On

You can turn it off using:

DirectorySlash Off

However it might expose some directories by showing their listings.

Security Warning

Turning off the trailing slash redirect may result in an information disclosure. Consider a situation where mod_autoindex is active (Options +Indexes) and DirectoryIndex is set to a valid resource (say, index.html) and there's no other special handler defined for that URL. In this case a request with a trailing slash would show the index.html file. But a request without trailing slash would list the directory contents.




回答2:


Apache's proper URL always ends in a slash /. Because it treats URL's as if they were a disk file path (which always ends in a slash). If it's not there, the server needs to take one additional step to internally add it. I say let it be.

Plus Google (supposedly) likes the trailing slashes.

I say keep it as is.

Please read more: http://cdivilly.wordpress.com/2014/03/11/why-trailing-slashes-on-uris-are-important/

and here: http://bit.ly/1uSvbfy :)



来源:https://stackoverflow.com/questions/25953076/apache-appends-trailing-slash-to-my-rewrite-rule

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!