【问题标题】:using mod_rewrite to simulate multiple sub-directories使用 mod_rewrite 模拟多个子目录
【发布时间】:2011-03-12 12:48:04
【问题描述】:

我的 .htaccess 文件目前如下所示:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /?([A-Za-z0-9-]+)/?$ index.php?page=$1 [QSA,L]

它适用于像 http://site.com/aaaaa 这样的网址,但对于像 http://site.com/aaaa/bbb 这样的网址,$_GET['page'] 变量将只包含 bbb 而不是 aaaaa/bbb。

有没有办法获取页面变量中的所有子目录?

【问题讨论】:

  • 尝试删除结尾 /?在重写规则中

标签: php mod-rewrite clean-urls


【解决方案1】:

我建议将/ 添加到最后一行的接受字符列表中:/?([A-Za-z0-9/-]+)/?$

【讨论】:

    【解决方案2】:

    为什么不直接捕捉一切

    我想是这样的:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) temp.php?page=$1 [QSA,L]
    


    有了这个(考虑到我的脚本在temp 文件夹中)http://tests/temp/blahhttp://tests/temp/blah/glop 都被重定向到 temp.php$_GET['page'] 包含“blah”或'blah/glop' .


    这通常是 Zend Framework 所做的,例如 (请参阅 here 以获取参考)

    【讨论】:

      【解决方案3】:

      在这一行:

      RewriteRule /?([A-Za-z0-9-]+)/?$ index.php?page=$1 [QSA,L]
      

      您错过了匹配整个字符串的 ^。此外,在您的字符串中,您希望匹配 URL 中的 /。所以应该是:

      RewriteRule ^/?([A-Za-z0-9-/]+)/?$ index.php?page=$1 [QSA,L]
      

      错过^ 会让你获得最后一场不贪婪的比赛。

      【讨论】:

        【解决方案4】:

        您使用这些字符范围有什么原因吗?

        为什么不使用:

        RewriteRule ^(.*)$ index.php?page=$1
        

        使用这样的东西也很危险,你可能会错过“page” GET 变量。我不确定哪个优先,但要么是不良行为。

        我看到的有关此行为的示例不会将路径作为 GET 参数传递,而是使用 php 从 $_SERVER['REQUEST_URI') 中提取它

        【讨论】:

          【解决方案5】:

          如果你只想在每个path segments 中允许字符[A-Za-z0-9-],试试这个:

          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule ^/?([A-Za-z0-9-]+(/[A-Za-z0-9-]+)*)/?$ index.php?page=$1 [QSA,L]
          

          顺便说一句:你应该选择一个拼写,带或不带斜杠,如果是另一种形式,则重定向。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-04
            • 1970-01-01
            • 2015-09-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多