使用 htaccess 仅删除一个文件的 php 扩展名

Remove php extension for only one file by using htaccess

我正在学习如何配置 htaccess。今天,我想在打开某个 PHP 页面时隐藏 PHP 访问权限,而不从文件中删除扩展名。

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ .php

此代码有效,但它删除了所有 PHP 文件的 PHP 扩展名。我怎样才能将它限制为只有一个文件? 假设路径为:https://example.com/content/myfile.php

而且,如果我以后想添加另一个文件,例如https://example.com/content/otherfile.php,我怎样才能不写两次相同的规则呢?谢谢!

with the code I just posted I can visit example.com/content/myfile correctly. But I wanted to restrict it to only this URL.

RewriteRule ^content/myfile$ content/myfile.php [L]

或者,使用反向引用来保存重复:

RewriteRule ^content/myfile$ [=11=].php [L]

[=14=] 反向引用包含与 RewriteRule 模式 匹配的 URL-path(即“content/myfile”)。


RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ .php

This code works, but it removes the PHP extension for all PHP files.

(如评论中所述,这实际上并没有“删除”任何东西。)

但这仅适用于应用 .php 扩展时作为物理文件存在的请求,因此如果您不想应用它,则不应请求任意 URL 首先没有 .php 扩展名。 (?)

And, if I want to add another file in the future, for example, https://example.com/content/otherfile.php, how can I do it without writing the same rule twice?

如果您只想将其应用于第二个任意文件,那么您显然需要编写两次基本相同的规则(或修改现有规则),否则,Apache 怎么知道重写 URL (没有编写您最初拥有的更通用的规则)?

您可以 combine/simplify 将两个规则合二为一,但这不一定是一种改进。例如,下面的单个规则将重写两个 URLs:

RewriteRule ^content/(myfile|otherfile)$ [=13=].php [L]

但这确实是您发布的第一条规则的目的 - 因此您不需要为每个 URL 编写第二条规则(或每次更新您的 .htaccess 文件)。