mod_rewrite和mod_dir冲突 [英] mod_rewrite and mod_dir collision

查看:97
本文介绍了mod_rewrite和mod_dir冲突的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编辑htaccess进行内部重定向 几乎任何指向php页面处理程序的URL:

I'm edditing my htaccess to internally redirects just about any URL to a php page handler:

RewriteRule ^images\/ - [L,NS]
RewriteRule ^docs\/ - [L,NS]
RewriteRule ^([A-Za-z0-9\_\-]+)\/?$ pages/pagehandler.php?page=$1 [L,QSA,NS]

这可以正常工作,接受地址中输入的目录 由于某些原因没有尾随斜杠的条获得重复的查询字符串, 并由于某种原因浏览器的地址栏发生了变化 例如,如果我输入URL:

this works fine accept that directories that are enteres in the address bar with no trailing slash for some reason get duplicate query strings, and for some reason the address bar of the browser changes for example, if I type the URL:

本地主机/电影

如果网站根目录中有一个名为movie的目录 地址更改为:

if there's a directory called movies in the site root than the address changes to:

localhost/movies/?page = movies

localhost/movies/?page=movies

我想这与mod_dir有冲突,但我不知道 如何克服它,如果我使用的话:

I guess this is some collision with mod_dir but I don't know how to overcome it, if I use:

<IfModule mod_dir.c>
   DirectorySlash Off
</IfModule>

比它有用,但我不想要这个,出于某种原因,我认为该网址 被重写,而不是mod dir更改它,然后被重新重写,因此 制作重复的查询字符串,

Than it works, but I don't want this, I think for some reason the url is rewritten than mod dir changes it and than it is rewritten again thus making duplicate query strings,

有什么想法吗?

我添加了Rewritelog的相关部分,这全部来自一个请求:

I Add a relevant part of the Rewritelog, this is all from one request:

strip per-dir prefix: /opt/lampp/htdocs/movies -> movies
applying pattern '^images\/' to uri 'movies'
strip per-dir prefix: /opt/lampp/htdocs/movies -> movies
applying pattern '^docs\/' to uri 'movies'
strip per-dir prefix: /opt/lampp/htdocs/movies -> movies
applying pattern '^pages\/' to uri 'movies'
strip per-dir prefix: /opt/lampp/htdocs/movies -> movies
applying pattern '^([A-Za-z0-9\_\-]+)\/?$' to uri 'movies'
rewrite 'movies' -> 'pages/pagehandler.php?page=movies'
split uri=pages/pagehandler.php?page=movies -> uri=pages/pagehandler.php, args=page=movies
add per-dir prefix: pages/pagehandler.php -> /opt/lampp/htdocs/pages/pagehandler.php
trying to replace prefix /opt/lampp/htdocs/ with /
strip matching prefix: /opt/lampp/htdocs/pages/pagehandler.php -> pages/pagehandler.php
add subst prefix: pages/pagehandler.php -> /pages/pagehandler.php
internal redirect with /pages/pagehandler.php [INTERNAL REDIRECT]
strip per-dir prefix: /opt/lampp/htdocs/movies/ -> movies/
applying pattern '^images\/' to uri 'movies/'
strip per-dir prefix: /opt/lampp/htdocs/movies/ -> movies/
applying pattern '^docs\/' to uri 'movies/'
strip per-dir prefix: /opt/lampp/htdocs/movies/ -> movies/
applying pattern '^pages\/' to uri 'movies/'
strip per-dir prefix: /opt/lampp/htdocs/movies/ -> movies/
applying pattern '^([A-Za-z0-9\_\-]+)\/?$' to uri 'movies/'
rewrite 'movies/' -> 'pages/pagehandler.php?page=movies'
split uri=pages/pagehandler.php?page=movies -> uri=pages/pagehandler.php, args=page=movies&page=movies
add per-dir prefix: pages/pagehandler.php -> /opt/lampp/htdocs/pages/pagehandler.php
trying to replace prefix /opt/lampp/htdocs/ with /
strip matching prefix: /opt/lampp/htdocs/pages/pagehandler.php -> pages/pagehandler.php
add subst prefix: pages/pagehandler.php -> /pages/pagehandler.php
internal redirect with /pages/pagehandler.php [INTERNAL REDIRECT]

还有访问日志中的相关部分:

Also the relevant part from the access log:

"GET /movies HTTP/1.1" 301
"GET /movies/?page=movies HTTP/1.1" 200

推荐答案

对于任何有此问题的人,我最终在禁用目录斜杠中所做的事情:

For anyone having this problem, what I did ultimately in disable the Directory Slash:

<IfModule mod_dir.c>
   DirectorySlash Off
</IfModule>

并且我使用RewriteRule来301重定向所有目录请求,而不是不以/结尾的

And I used a RewriteRule to 301 Redirect all directory requests than do not end with a /

我想这是mod_rewrite和mod_dir之间的某种冲突 就像我最初想的那样

I guess this is some sort of collision between mod_rewrite and mod_dir as I primarily thought

这篇关于mod_rewrite和mod_dir冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆