Php .htaccess将父文件夹重写为子文件夹

Php .htaccess将父文件夹重写为子文件夹,php,.htaccess,Php,.htaccess,如何从server.ip/~bogo/api/*重定向到server.ip/~bogo/api/public/*? 需要帮忙吗 下面是api目录中的htacces <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L] </IfModule> <IfModule mo

如何从server.ip/~bogo/api/*重定向到server.ip/~bogo/api/public/*? 需要帮忙吗

下面是api目录中的htacces

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

重新启动发动机
重写规则^$public/[L]
重写规则(.*)public/$1[L]
我的htacces在公共目录中

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

重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*)$index.php?\u url=/$1[QSA,L]

但是我得到了404错误???

Apache将通过
.htaccess
直到没有规则匹配为止。您最可能面临的问题是,新url与同一规则的正则表达式匹配。您已经创建了一个无限循环。如果url中已包含“public”,则可以通过确保规则不匹配来修复此问题:

<IfModule mod_rewrite.c>
  RewriteEngine on

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

重新启动发动机
重写cond%{REQUEST_URI}/公开的/
重写规则(.*)public/$1[L]

好的,我解决了,这是我的解决方案

api目录访问

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

选项+FollowSymLinks
重新启动发动机
重写base/~bogo/api/
重写cond%{REQUEST_URI}/公开的/
重写规则(.*)公共/$1
公用目录访问

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

选项+FollowSymLinks
重新启动发动机
重写base/~bogo/api/public/
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*)$index.php?\u url=/$1[QSA,L]

我假设您遇到内部服务器错误。这是正确的吗?如果没有,问题出在哪里?是的,我在api目录中得到了内部服务器错误和我的htaccess文件,您的服务器的错误日志具体说明了什么?很抱歉,我得到了404错误,而不是内部服务器错误/home/bogo建议,
RewriteBase
可能会解决问题,而不是您使用的完整url方法。我认为删除“
http://server.ip
“您的解决方案仍然有效,因为如果您首先在该服务器上,它会自动删除。但是我无法测试它。您能翻译此
(*)public/$1[L]
此规则匹配所有内容,并将其放入捕获组1中吗。然后,它在其前面加上public,并在其后面添加捕获组1的内容(
$1
)<代码>(.*)应该匹配所有内容,因为它是贪婪的,但是如果我现在就写的话,我会把它写成
^(.*)$