CakePHP .htaccess mod_rewrite 配置以排除特定文件夹/url

Posted

技术标签:

【中文标题】CakePHP .htaccess mod_rewrite 配置以排除特定文件夹/url【英文标题】:CakePHP .htaccess mod_rewrite configuration to exclude a particular folder/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.

提前致谢。

毛里西奥。

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于CakePHP .htaccess mod_rewrite 配置以排除特定文件夹/url的主要内容,如果未能解决你的问题,请参考以下文章

OS X 10.6 服务器 .htaccess、WebDAV 和 CakePHP 问题

Windows IIS7上的Htaccess和CakePHP 2

Letsencrypt和CakePHP应用程序的Htaccess重写文件

CakePHP .htaccess mod_rewrite 配置以排除特定文件夹/url

cakephp重写配置

如何使子目录中的 cakePHP 2.x 出现在根目录中(在 htaccess 中使用 mod_rewrite)? [关闭]