首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >具有现有子目录的.htaccess RewriteRule行为

具有现有子目录的.htaccess RewriteRule行为
EN

Stack Overflow用户
提问于 2019-04-02 16:38:09
回答 1查看 63关注 0票数 0

我经历过许多类似的问题,但我找不到这个特殊的案例:

具有这种结构的:

代码语言:javascript
代码运行次数:0
运行
复制
public_html/
   q/
      .htaccess
      index.php
      /dirnofixedname1
      /dirnofixedname2
      /dirnofixedname3
  • dirnofixednameN是指有文件可供index.php使用且不能直接访问的文件夹(类似于此,因为我可能不会枚举.htaccess文件中的所有文件,否则这是不切实际的)。
  • index.php应该处理传入的请求

这样做的目的是处理请求,比如:http://domain/q/dirnofixedname2http://domain/q/index.php?q=dirnofixedname2,同时仍然显示http://domain/q/dirnofixedname2。一个很受欢迎而且已经解决的案子。

因此,.htaccess文件是:

代码语言:javascript
代码运行次数:0
运行
复制
RewriteEngine On

RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ index.php?q=$1 [L]

问题是,当请求与现有目录(我想要的)匹配时,它按预期工作(index.php执行并获得q),但重定向到:

代码语言:javascript
代码运行次数:0
运行
复制
http://domain/q/dirnofixedname2/?q=dirnofixedname2

(并在URL栏中显示这一点),而不是预定的:

代码语言:javascript
代码运行次数:0
运行
复制
http://domain/q/dirnofixedname2

特别是,如果目录碰巧不存在,

代码语言:javascript
代码运行次数:0
运行
复制
http://domain/q/dirthatdoesnotexist

index.phpq作为dirthatdoesnotexist正确处理(脚本显然不接受该处理,而不返回任何内容)。

对于在子Do存在的情况下如何避免重定向,您有什么想法吗?(与参数具有相同的dir名称是实用的)

EN

回答 1

Stack Overflow用户

发布于 2019-04-15 06:19:41

这是由于DirectorySlash指令(默认情况下为On状态)发生的,因为您在URI中请求一个实际的目录。

您可以通过以下方式关闭它:

代码语言:javascript
代码运行次数:0
运行
复制
DirectorySlash Off

此外,要屏蔽目录清单,请使用:

代码语言:javascript
代码运行次数:0
运行
复制
Options -Indexes

在你的.htaccess顶部

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55479697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档