【发布时间】:2015-07-29 08:21:28
【问题描述】:
我需要的是作为参数传递给根 index.php 的任何子文件夹 这是代码,它确实有效。
RewriteEngine On
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} -d
RewriteRule ^(.+?)(/[^/]*|)$ index.php?dir=$1/ [L,QSA]
有问题:
当 url 是这样的时候('projects' 后面没有斜杠):http://example.com/projects
重写规则改变了地址栏中的链接,它看起来像这样:http://example.com/projects/?dir=projects/
地址栏中的 url 是否有可能始终保持不变(无论是否有斜杠),因此用户看不到 dir 参数?
我尝试了多个规则 - 第一个添加结束斜杠,然后第二个规则将目录作为参数传递,但到目前为止没有运气。
编辑:到目前为止,感谢 w3d,我设法让它工作。在 .htaccess 中添加: 目录斜线关闭
【问题讨论】:
-
你是不是建议当你指定一个结束斜线时,地址栏中的 URL 不会改变?
-
正是——这正是我想要的
-
嗯,我最初的想法是,这是mo_dir中
DirectorySlash On(默认)的结果。 Apache 自动将斜杠附加(修复)到作为目录的 URL。但是,我没有立即看到您的RewriteRule将如何产生给定的结果(index.php去哪里了)?你还有其他指令吗?以及为什么这会导致外部重定向,而不是内部重写 - 正如您的RewriteRule指令所述? -
这些都是指令。我不知道它是如何省略 index.php 而只留下查询部分的。但我认为,如果在末端使用斜线它可以工作,那么有一种方法可以在没有结束斜线的情况下工作。如果我用 2 条规则再次尝试是否有逻辑 - 第一个在末尾添加斜杠,第二个将 dir 作为参数传递给根?
-
由于
projects是文件系统上的实际目录,Apache 会自动在请求上附加一个斜杠(如上所述)——这可能是问题的根本原因。我很快就会自己尝试一些测试......
标签: .htaccess mod-rewrite