子目录中的PHP脚本在被调用

时间:2018-07-07 22:38:39

标签: php regex apache .htaccess http

我想将一些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 个答案:

答案 0 :(得分:1)

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

  

RewriteBase指令指定要用于的URL前缀   每个目录(htaccess)替代一个的RewriteRule指令   相对路径。

您可以像这样修改.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

我希望它会有所帮助。随时问您是否有任何疑问:)