.htaccess 将文件从根目录传输到其他目录时重写规则

.htaccess 将文件从根目录传输到其他目录时重写规则,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,以前,很多项目文件都在根目录中。根目录中包含以下文件: index.php make.php 为了使文件结构更具逻辑性,已将上述文件移动到/operation/文件夹中 问题:如果希望以下链接仍能正常工作,如何在.htaccess中编写重定向规则: https://example.com/ https://example.com/?var=value https://example.com/make.php 这样,客户机甚至不会猜到,事实上,对文件的访问: https://example

以前,很多项目文件都在根目录中。根目录中包含以下文件:

index.php
make.php
为了使文件结构更具逻辑性,已将上述文件移动到/operation/文件夹中

问题:如果希望以下链接仍能正常工作,如何在.htaccess中编写重定向规则:

https://example.com/ 
https://example.com/?var=value 
https://example.com/make.php
这样,客户机甚至不会猜到,事实上,对文件的访问:

https://example.com/operation/
https://example.com/operation/?var=value
https://example.com/operation/make.php
如果在.htaccess文件中指定如下规则:

RewriteEngine On
RewriteRule ^/?$ /operation/
RewriteRule ^/(.*\.php)$ /operation/$1

然后正常工作,但不工作。

重写规则
模式匹配的URL路径在每个目录
.htaccess
文件中不以斜杠开头,因此regex
^/(.\.php)$
从不匹配,请求也不会被重写

但是,您的问题文本说明了3个需要重写的URL,但是您发布的代码看起来似乎是为了匹配“any”
.php
文件。这就是目的吗?或者这会与根目录中的其他
.php
文件冲突吗

要重写这3个URL,请执行以下操作:

RewriteEngine On
RewriteRule ^(index\.php)?$ /operation/index.php [L]
RewriteRule ^(make\.php)$ /operation/$1 [L]
您应该直接重写到处理请求的文件,即第一条规则中的
index.php
。否则,您将依赖mod_dir为DirectoryIndex发出额外的内部子请求。第一条规则捕获对
/
/index.php
的请求。默认情况下,将传递查询字符串


不要忘记
L
标志,否则,处理将继续(不必要地)。

此解决方案适合我:

RewriteEngine On
RewriteBase /
RewriteRule ^([^/]*)$ /operation/$1 [NC]

你试过这个吗<代码>重写规则^/(.*)\.php$/operation/$1
RewriteEngine On
RewriteBase /
RewriteRule ^([^/]*)$ /operation/$1 [NC]