如何重定向到子文件夹,然后在htaccess中重写子文件夹链接到root?

时间:2016-02-09 23:26:04

标签: php apache .htaccess redirect mod-rewrite

我很抱歉,如果这个问题是重复的,但我在网上搜索的所有内容都让我很困惑,所以我再次发布这个问题来说明我的需求。

由于我希望我的网站结构干净,我想将内容与配置分开,因此我将所有页面放在/app文件夹中(很像rails应用程序)。网站的结构非常类似:

.
├── app
│   ├── index.php
│   └── products
│       └── index.php
├── configs
└── layouts

我通过这种方式找到了如何重定向根目录转移到/app中的.htaccess文件夹:

RewriteEngine on
RewriteRule ^$ /app [L]

当我访问服务器时,apache重定向到/app文件夹,网址为:localhost/app

我想重写网址以删除/app。例如,当我访问/products/文件夹时,我不希望网址如下所示:localhost/app/products/我希望它看起来像这样:localhost/products/

我搜索了解决方案,我发现,非常喜欢为worpress做的,你只需添加:

RewriteEngine on
RewriteRule ^$ /app [L]    
RewriteRule %{REQUEST_URI} ^/app/.*
RewriteRule ^(.*)$ app/$1 [L]

然而,这不起作用,apache返回500 internal server error

我试过了:

RewriteEngine on
RewriteRule ^$ /app [L]  
RewriteRule %{REQUEST_URI} !^/app/
RewriteRule ^(.*)$ app/$1 [L]

RewriteEngine on
RewriteRule ^$ /app [L]  
RewriteRule %{REQUEST_URI} !^/app/.*
RewriteRule ^(.*)$ app/$1 [L]

并且都返回500 internal server error

我也尝试过:

RewriteEngine on
RewriteRule ^$ /app [L]  
RewriteCond %{REQUEST_URI} !^/app/
RewriteRule ^(.*)$ app/$1 [L]

/app仍在网址中!

我该怎么做?

1 个答案:

答案 0 :(得分:0)

尝试:

 RewriteEngine on

#--Redirect /app/foobar to /foobar--#
RewriteCond %{THE_REQUEST} /app/([^\s]+) [NC]
RewriteRule ^ /%1 [NC,L,R]
#--Rewrite /foobar to /app/foobar--#
RewriteCond %{REQUEST_URI} !^/app
RewriteRule ^(.*)$ /app/$1 [NC,L,QSA]