我想将一些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
答案 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
)
我希望它会有所帮助。随时问您是否有任何疑问:)