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 2.x 出现在根目录中(在 htaccess 中使用 mod_rewrite)? [关闭]