让 .htaccess RewriteRule 重定向到“当前目录中”的脚本(而不是显式路径)

2024-04-04

我在 .htaccess 中使用 RewriteRule 进行重定向anything这不是一个现有文件,到一个“cms.php”文件,该文件动态处理任何请求(或输出一些错误消息,如果适用)。

这是我在 .htaccess 中执行的操作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /cms.php [L,QSA]

奇迹般有效。

但是,出于开发目的,我也想在本地 XAMPP 系统上托管相同的站点。在我实际的实时网络服务器上,cms.php 位于文档根文件夹中,因此我可以在那里使用 /cms.php 。但在我的本地开发计算机上,该站点位于某个子目录中,即 /cms.php 不是正确的路径。

我还尝试了“cms.php”(前面没有/)以及“./cms.php”(希望“.”表示当前目录)但无济于事。只有当我在 RewriteRule 中明确指定 /the/ Correct/subdir/cms.php 时,它才可以正常工作,但显然这仅在开发计算机上有效,而不在我的实时网络服务器上有效。

我可以以某种方式使用智能路径或 mod_rewrite 变量或其他东西,以便 .htaccess 知道它需要重定向到我的 cms.php 文件与 .htaccess 本身所在的目录相同 ?


通常,您只需设置一个RewriteBase到 dev 目录并保留规则目标的前导斜杠:

RewriteEngine On
RewriteBase /subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ cms.php [L,QSA]

但是,如果这还不够好,并且您希望能够任意移动 htaccess 文件,而不必一直更改基址,那么您可以尝试通过检测任意基址来做一些疯狂的事情:

RewriteCond %{ENV:URI} ^$
RewriteRule ^(.*)$ - [ENV=URI:$1]

RewriteCond %{ENV:BASE} ^$
RewriteCond %{ENV:URI}::%{REQUEST_URI} ^(.*)::(.*?)\1$
RewriteRule ^ - [ENV=BASE:%2]

在 htaccess 文件的最顶部,然后使用BASE环境变量:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ %{ENV:BASE}cms.php [L,QSA]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 .htaccess RewriteRule 重定向到“当前目录中”的脚本(而不是显式路径) 的相关文章

随机推荐