【问题标题】:CakePHP .htaccess mod_rewrite configuration to exclude a particular folder/urlCakePHP .htaccess mod_rewrite 配置以排除特定文件夹/url
【发布时间】:2011-01-16 00:47:01
【问题描述】:

我在服务器的子文件夹中安装了 CakePHP,我想在该子文件夹中安装另一个应用程序:

root/public_html/subfolder/cake/
root/public_html/subfolder/app/

等等。现在我需要在那里安装一个自定义应用程序:

root/public_html/subfolder/my_custom_application/

我的 .htaccess 中有类似的东西:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

如何配置它以从该规则中排除“my_custom_application”文件夹?

我试过了:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    ((?!my_custom_application).*) app/webroot/$1 [L]
</IfModule>

但我明白了:

Error:  The requested address '/y_custom_application' was not found on this server.

提前致谢。

毛里西奥。

【问题讨论】:

    标签: .htaccess mod-rewrite cakephp


    【解决方案1】:

    把它放在RewriteRule 行之前:

    RewriteCond %{REQUEST_URI} !^/my_custom_application
    

    【讨论】:

    • 您好,感谢您的提示,但我仍然遇到相同的错误:错误:在此服务器上找不到请求的地址“/my_custom_application”。这次是“my_custom_application”的“m”
    【解决方案2】:

    如何从 CakePHP 路由中排除目录:

    我遇到了和你一样的问题。我挣扎着,但终于找到了有用的东西。
    (我之所以回复是因为上面的答案对我不起作用,但确实如此)。

    我的目录结构:

    root/public_html/app/
    root/public_html/lib/
    root/public_html/plugins/
    root/public_html/vendors/
    root/public_html/directory_to_exclude/
    

    我在 CakePHP 的默认路由中添加的内容:

    RewriteCond %{REQUEST_URI} !^/directory_to_exclude/(.*)
    

    实际上,我需要允许人们单独访问子文件夹(因为它有一个单独的应用程序)。另外,在我的例子中,我默认从根目录提供一个 CakePHP 应用程序。
    这就是我的 CakePHP 2.x htaccess 的样子:

    更新了 .Htaccess(这对我有用)

    <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteCond %{REQUEST_URI} !^/directory_to_exclude/(.*)
       RewriteRule    ^$ app/webroot/    [L]
       RewriteRule    (.*) app/webroot/$1 [L]
    </IfModule>
    

    就您而言,我知道您需要它在子文件夹中工作;这是我调整后的 htaccess 我没有机会测试它,但我相信这(或类似的东西)会起作用:

    最终产品(用于子文件夹)

    <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteCond %{REQUEST_URI} !^/subfolder/directory_to_exclude/(.*)
       RewriteRule    ^$ subfolder/app/webroot/    [L]
       RewriteRule    (.*) subfolder/app/webroot/$1 [L]
    </IfModule>
    

    【讨论】:

    • 它似乎有效。但不适用于 CakePHP 3.x 请给我建议。
    【解决方案3】:

    您必须将 dir_to_exclude 替换为您的目录名称。

    <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude)(?:$|/)
       RewriteRule    ^$ app/webroot/    [L]
       RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude)(?:$|/)
       RewriteRule    (.*) app/webroot/$1 [L]
    </IfModule>
    

    如果您想拥有多个排除目录,您必须添加它们,并用 |additional_dir_to_exclude 分隔

    <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude|additional_dir_to_exclude)(?:$|/)
       RewriteRule    ^$ app/webroot/    [L]
       RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude|additional_dir_to_exclude)(?:$|/)
       RewriteRule    (.*) app/webroot/$1 [L]
    </IfModule>
    

    【讨论】:

      猜你喜欢
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      相关资源
      最近更新 更多