【问题标题】:Get variables show up in sub-sub directory rewrites, .htaccess, mod_rewrite获取变量显示在子目录重写、.htaccess、mod_rewrite
【发布时间】:2011-09-30 17:17:09
【问题描述】:

这是我的 .htaccess:

Options +FollowSymLinks  
Options +Indexes  
RewriteEngine On  
RewriteCond %{REQUEST_FILENAME} -d  
RewriteRule ([^/]+/.*) index.php?dir=%{REQUEST_URI}  

htaccess 位于 test.com/main/.htaccess
我可以很好地访问 test.com/main/ 和 test.com/index.php
test.com/main/directory 被重写为 test.com/main/index.php?dir=/main/directory/ 但 test.com/main/directory 保留在 url 栏中。这很好。

问题是当我尝试访问子目录时。当我访问 test.com/main/foler1/folder2 时,它会被重写为 index.php?dir=/main/folder1/folder2/。这也很好,但是 test.com/main/folder1/folder2/?dir=/main/folder1/folder2/ 显示在地址栏中,而不是在 URL 栏中保留 test.com/main/folder1/folder2。这就是问题。

我希望所有子目录,而不仅仅是 main 的直接子目录,在重写时将目录保留在 url 栏中。直接子代做得很好,但是该目录下的任何目录都会以我的 get 变量出现的方式进行重写。

这种重写的目的是让我不必将 index.php 文件复制到每个新创建的文件夹中,因此将 .htaccess 复制到每个文件夹中就达不到目的了。

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    我将添加我在测试 mootinator 的解决方案时找到的解决方案。

    而不是链接到
    test.com/main/foler1/folder2

    链接到
    test.com/main/foler1/folder2/(包括斜线!)

    重定向将成功重定向到
    index.php?dir=/main/folder1/folder2/

    同时
    test.com/main/foler1/folder2/
    停留在网址栏中。

    这是一个有点骇人听闻的解决方案,但它应该可以正常工作。

    【讨论】:

    • 为什么要重写存在的目录?通常的做法是重写所有存在的目录或文件,然后在代码中确定URL是否有效。
    • 我更新了我的答案来解决这个问题,假设你无论如何都有充分的理由这样做 =)
    【解决方案2】:

    您可能想要RewriteRule ([^/]+/.*) index.php?dir=%{REQUEST_URI} [QSA,L](如果规则成功,L 会阻止 mod 重写处理任何进一步的规则)QSA 会附加任何可能已传入的查询字符串。

    更新:

    问题是服务器正在将不带斜杠的 URL(明显地)重写为带斜杠的 URL,并将您的重写规则作为其中的一部分。解决方法是仅在 URL 以斜杠结尾时处理规则,例如:

    RewriteRule ([^/]+/.*/$) index.php?dir=%{REQUEST_URI} [QSA,L]
    

    这样它将分两个单独的步骤进行重写:

    1. 明显地添加斜线。
    2. 使用您的规则重写 index.php

    代替:

    1. 添加斜线并以可见的方式重写 index.php。

    【讨论】:

    • 好吧,虽然我确实注意到了一些我以前没有注意到的东西,但这个解决方案并没有奏效。如果我加载任何 sub-sub 或 sub-sub-sub 目录,同时在末尾包含一个斜杠,则重写一如既往地正确执行,但 get 变量不显示。我想我可以接受这个解决方案。我只需要检查我自动生成的链接,以确保它们在路径末尾用斜杠链接。不过感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    相关资源
    最近更新 更多