【发布时间】:2021-08-26 12:49:36
【问题描述】:
我正在尝试通过 php 文件路由所有请求并检查登录名和权限来限制对我网站某个部分的访问。
我有一个文件夹 (/doc),其中包含各种 .html 文件,使用 mod_rewrite 我将所有有效文件重定向到根目录中的 .php 文件(现在只打印一个测试字符串)。
这是我的 .htaccess:
# BEGIN WordPress
# Le direttive (linee) tra `BEGIN WordPress` e `END WordPress` sono
# generate dinamicamente, e dovrebbero essere modificate solo tramite i filtri di WordPress.
# Ogni modifica alle direttive tra questi marcatori verrà sovrascritta.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !/(wp-content/uploads/.*)$
RewriteCond %{REQUEST_URI} !/(doc/.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
RewriteCond %{HTTP_HOST} ^mywebsite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.mywebsite\.com$
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^webmail$ "https\:\/\/mywebsite\.mywebsite\.com\:2096\/" [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^doc/(.*)$ /dl-file.php?file=$1 [QSA,L]
最后两行应该将所有有效文件的 URL 重写为 php 文件。
发生的情况是文件夹 (mywebsite.com/doc/) 可以正常工作,我不明白为什么。而对于.html 文件(mywebsite.com/doc/index.html),它只显示它们而不加载.php
【问题讨论】:
-
您可能正在查看早期尝试的缓存结果...
-
上移最后一条规则,将其置于
RewriteBase行下方 -
指令的顺序肯定是错误的(“webmail”规则可能没有做任何事情),但是,“最后一条规则”应该仍然工作,它是“最后的”。但是,不应将其移至
RewriteBase行下方...正如上面的评论所述(法语),您不应手动编辑# BEGIN WordPress和# END WordPress评论标记之间的代码,因为 WordPress 将覆盖它(至少尝试)。你还有这个问题吗?您是否确认这不是缓存问题? -
我还想问为什么您不只是将
/doc/...的每个请求都重写到您的脚本,而不仅仅是物理文件。您的脚本应该已经确定请求是否映射到可下载文件,因此应该能够处理 404 等。 -
@MrWhite 这不是缓存问题,我已经清理了缓存,尝试了隐身模式、其他浏览器、智能手机。我已经上下移动了 RewriteRule,删除了 RewriteCond,似乎没有任何效果。对于不存在的文件,我会重定向到我的 .php 文件,而现有文件会立即获取服务器...
标签: apache .htaccess mod-rewrite