代码之家  ›  专栏  ›  技术社区  ›  Richard

子目录中的php脚本在调用时自动请求根目录中的相同脚本

  •  3
  • Richard  · 技术社区  · 8 年前

    我想迁移一些 MySQL 编码到 MySQLi ,所以我创建了一个子目录,并将所有的web文件复制到该子目录中,以便在网站继续工作而不受任何干扰的情况下能够联机工作,尤其是这样,我就可以在同一个数据库上使用原始数据库配置。我计划在迁移完成后将子目录移到主目录。

    我现在的主要问题是 domain.com/subdirectory/script.php ,那么最终的结果是 domain.com/script.php 而是被调用。我有我的指令 .htaccess 它“隐藏”了 .php 因此通常第一个响应是 302 然后一个 200 是的。但现在它实际上返回了302但是这次 location 成为主目录中的脚本,即使它是从子目录调用的。

    这是有关主目录和子目录的.htaccess:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    RewriteRule ^(.+)\.php$ /$1 [R,L]
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.*?)/?$ /$1.php [NC,END]
    Options -Indexes
    ErrorDocument 404 domain.com/page-not-found
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Nimeshka Srimal    8 年前

    我没有检查你重写规则的有效性或逻辑。但根据你的要求,我认为你缺少的是 RewriteBase 指令。

    rewritebase指令指定要用于 每个目录(htaccess)重写规则指令 相对路径。

    您可以这样修改.htaccess文件。

    您的主目录:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    RewriteRule ^(.+)\.php$ $1 [R,L]
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.*?)/?$ $1.php [NC,END]
    Options -Indexes
    ErrorDocument 404 domain.com/page-not-found
    

    您的子目录:

    RewriteEngine On
    RewriteBase /subdirectory/
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    RewriteRule ^(.+)\.php$ $1 [R,L]
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.*?)/?$ $1.php [NC,END]
    Options -Indexes
    ErrorDocument 404 domain.com/page-not-found
    

    这里,唯一的区别是我加了 RewriteBase 并更改了重定向位置中的绝对路径。( $1 而不是 /$1 )

    我希望有帮助。如果您有任何疑问,请随时询问:)

    推荐文章