简而言之,这是常规的TYPO3 RealURL .htaccess,位于public_html
:
# * BASIC TYPO3 URL REWRITING *
# -----------------------------
RewriteRule ^typo3$ - [L]
RewriteRule ^typo3/.*$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php
它会将不以typo3开头的传入链接(不是文件,目录或符号链接)重定向到中央入口点index.php。
现在我们有一个名为public/user_upload/myDir
的.htaccess / httpauth受保护目录。
其.htaccess文件仅包含以下行:
AuthUserFile "/home/user/.htpasswds/public_html/fileadmin/user_upload/myDir/passwd"
AuthType Basic
AuthName "Please authenticate"
require valid-user
只要启用主.htaccess重定向,就无法从该目录访问文件www.mysite.com/public/user_upload/myDir/myfile.pdf
。
而不是显示httpauth-login-dialogue,这是期望的结果,而index.php的RewriteRule仍然适用。
所以我想通过添加以下行来排除重写该目录:
# * BASIC TYPO3 URL REWRITING *
# -----------------------------
RewriteRule ^typo3$ - [L]
RewriteRule ^typo3/.*$ - [L]
// stop rewriting if myDir is accessed
RewriteRule ^public/user_upload/myDir/.*$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php
听起来不错,但不起作用。重写仍然转到index.php。 可能是什么原因?
好像!-d
无法检测到目录。也许是因为它受到了保护?
答案 0 :(得分:1)
我意识到我的问题实际上是关于mod_rewrite和htpasswd之间的冲突。通过Google搜索这些字词,我找到https://www.drupal.org/node/33645,导致https://serverfault.com/questions/55323/disable-mod-rewrite-for-subdirectory和http://www.myriadinteractive.com/blog/view/id/29/conflict-between-apache-url-rewriting-and-basic-authentication
对于基本身份验证,服务器会写入“401 Unauthorized” 标题然后根据预定义查找错误文档 路径。大多数情况下,错误文档将不存在 您要保护的目录,因此请求由。处理 重写引发404错误的引擎。
解决方案很简单:返回401并关闭受保护目录中的mod_rewrite。
所以每个.htaccess文件都必须这样编辑:
# new
ErrorDocument 401 "Unauthorized Access"
RewriteEngine off
# as before
AuthType Basic
AuthName "MyName"
AuthUserFile "/home/mysite/.htpasswds/public_html/my/path/"
require valid-user