2014-07-24 30 views
0

如何从server.ip /〜bogo/api/*重定向到server.ip /〜bogo/api/public/*? 任何帮助,请.htaccess将父文件夹重写到子文件夹

下面是API目录htacces

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

我htacces在公共目录

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] 
</IfModule> 

,但我得到的404错误?

+0

我假设你得到一个内部服务器错误。它是否正确?如果不是,问题是什么? – Sumurai8

+0

是的,我得到内部服务器错误和我的htaccess文件在api目录 – user3213240

+0

和你的服务器的错误日志具体说明这个错误? – deceze

回答

0

Apache将通过.htaccess,直到没有规则匹配了。你最可能面临的问题是,新的url正在被相同规则的正则表达式匹配。你创建了一个无限循环。您可以通过确保规则解决这个不匹配,如果该URL在它已经有“公”:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    RewriteCond %{REQUEST_URI} !/public/ 
    RewriteRule (.*) public/$1 [L] 
</IfModule> 
+0

我试过了,但我仍然得到404错误 – user3213240

+0

你可以翻译这个'''(。*)public/$ 1 [L]'''' –

+0

这条规则匹配所有内容,并将其放在捕获组1中。然后将它作为公共前缀,并在捕获组1('$ 1')之后添加捕获组1的内容。 '(。*)'应该匹配所有内容,因为它很贪婪,但是如果我现在写它,我会把它写成'^(。*)$'。 – Sumurai8

1

好吧,我解决了这个问题,这里是我的解决方案

API目录的htaccess

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine on 
RewriteBase /~bogo/api/ 
RewriteCond %{REQUEST_URI} !/public/ 
RewriteRule (.*) public/$1 
</IfModule> 

公共目录的htaccess

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase /~bogo/api/public/ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] 
</IfModule>