首页 > 解决方案 > Apache .htaccess 将不存在的文件映射到脚本

问题描述

这是我目前拥有的 .htaccess 文件:

Options -Indexes
AddDefaultCharset utf-8
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
<Files ".ht*">
    Require all granted
</Files>
RewriteEngine on
RewriteRule ^error\.html$ / [R=301]
RewriteRule ^\.ht / [L,R=301,NC]

我需要添加一个特定规则来将不存在的文件映射到脚本,如下所示:

RewriteRule /folder/file.txt /folder/file.php [L]

如何将此规则添加到 .htaccess?

我试过了:

Options -Indexes
AddDefaultCharset utf-8
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
<Files ".ht*">
    Require all granted
</Files>
RewriteEngine on

RewriteCond "%{REDIRECT_URL}" "/folder/file.txt"
RewriteRule ^error\.html$ /folder/file.php [L]

RewriteRule ^error\.html$ / [R=301]
RewriteRule ^\.ht / [L,R=301,NC]

但它不起作用。

谢谢!

标签: apache.htaccess

解决方案


使用您显示的示例,请尝试遵循 htaccess 规则文件。确保将您的 htaccess 文件保存在根目录中。

还要确保在测试 URL 之前清除浏览器缓存。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/folder/file\.php -f [NC]
RewriteRule ^folder/file\.txt$ /folder/file.php [NC,L]


或者,如果您不仅要匹配 uri 中的任何 .txt 文件,那么请尝试遵循规则,请确保尝试上述规则集或一次仅遵循一个规则集。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/folder/$1\.php -f [NC]
RewriteRule ^folder/([^.]*)\.txt$ /folder/$1.php [NC,L]

推荐阅读