【问题标题】:Mod rewrite - File attribute "-f" test fails even when the regular file existsMod rewrite - 即使常规文件存在,文件属性“-f”测试也会失败
【发布时间】:2019-12-03 21:41:26
【问题描述】:

根据mod rewrite doc regarding -f

将 TestString 视为路径名并测试它是否 存在,并且是一个常规文件。

所以,我有以下重写规则

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond /efs/my-project/angular-json/$1/$2.json -f
RewriteRule ^/(test-folder)/(california)$ http://noderender:8080/$1/$2?mode=client [P,QSA,E=CACHE_CHECK:]

以及文件的统计数据

$ stat /efs/my-project/angular-json/test-folder/california.json
  File: /efs/my-project/angular-json/test-folder/california.json
  Size: 1689        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 5373962     Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/    choz)   Gid: ( 33/    www-data)
Access: 2019-07-25 00:00:20.811760100 +0800
Modify: 2019-07-23 21:43:48.177173780 +0800
Change: 2019-07-23 21:43:48.177173780 +0800
 Birth: -

还有,这是它的日志,

applying pattern '^/(test-folder)/(california)$' to uri '/test-folder/california'
RewriteCond: input='/var/www/my-project/test-folder/california' pattern='!-f' => matched
RewriteCond: input='/var/www/my-project/test-folder/california' pattern='!-d' => matched
RewriteCond: input='/efs/my-project/angular-json/test-folder/california.json' pattern='-f' => not-matched

问题是,为什么 -f 在那里不匹配?我是否缺少任何 httpd 配置并导致此问题?

【问题讨论】:

    标签: apache mod-rewrite url-rewriting httpd.conf


    【解决方案1】:

    帮助面临同样问题的其他人。在我的例子中,/efs 是来自另一个磁盘的安装路径。卸载它并从与 apache 相同的磁盘提供 /efs 可以解决此问题。

    所以,在我的 /etc/fstab

    # Commented this line
    # /dev/disk/by-uuid/741805d1-d67a-4936-8b93-c3d223351615 /efs auto nosuid,nodev,nofail,x-gvfs-show 0 0
    

    我没有进一步挖掘这个,但我的结论是 apache (www-data) 无法从另一个磁盘读取文件?很奇怪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多