2010-02-12 84 views
1

我有一个子文件夹中的CakePHP安装在我的服务器,我想安装一个子文件夹内的另一个应用:的CakePHP的.htaccess mod_rewrite设定排除特定文件夹/ URL

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. 

感谢。

Mauricio。在RewriteRule行之前

回答

4

如何从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> 
+0

它似乎工作。但不能在CakePHP 3.x中工作,请给我一些建议。 –

2

把这个:

RewriteCond %{REQUEST_URI} !^/my_custom_application 
+0

您好,感谢您的提示,但我仍然有同样的错误: 错误:在此服务器上找不到请求的地址'/ my_custom_application'。 这次与“my_custom_application”的“m” – Mauricio

+0

然后该规则正常工作。问题在别处。 –

0

你有最终产品用您的dir名称替换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> 
相关问题