使用 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
文件)。
我正在学习如何配置 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
文件)。