【问题标题】:mod_rewrite relative path not working. RewriteBase requiredmod_rewrite 相对路径不起作用。需要 RewriteBase
【发布时间】:2016-04-11 10:01:57
【问题描述】:

我在一个目录中使用一个简单的 .htaccess 文件将该目录中的所有请求重定向到同一目录中的一个脚本,但是相对路径不起作用,我必须使用 RewriteBase 否则它不会工作。

这是我的设置,

目录布局:

/ (web root)
|- index.html
|- hooks
   |- .htaccess
   |- server.py

当我向http://example.com/hooks/foo 发出请求时,我希望它会重写为http://example.com/hooks/server.py/foo

这是我的.htaccess

RewriteEngine On
RewriteBase /hooks/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ server.py/$1 [L,QSA]

以上工作正常。但是,如果我删除 RewriteBase /hooks/ 行,它不会。

什么给了?它不应该默认为相对路径吗?我的主机是否存在配置问题?有什么办法可以调试吗?

【问题讨论】:

  • 当您删除 RewriteBase 时,它将重写的 URL 将是:http://example.com/hooks/foo/server.py/foo
  • RewriteBase 被注释掉时,http://example.com/hooks/foo 得到 404 吗?
  • @hjpotter92 哦,有道理!但这是为什么呢?如果 foo 不是有效目录
  • @anubhava 是的,它是 404 的
  • 确切的 404 错误信息是什么?

标签: apache .htaccess mod-rewrite


【解决方案1】:

如果你删除 RewriteBase:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ server.py/$1 [L,QSA]

所以http://example.com/hooks/foo 将请求链接 http://example.com/hooks/server.py/hooks/foo

我认为这就是您收到 404 错误的原因。

这条规则怎么样:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^hooks/(.*)$ server.py/$1 [L,QSA]

【讨论】:

  • 这只是写同一件事的不同方式。我正在尝试消除指定当前目录的需要。
猜你喜欢
  • 2015-07-24
  • 2021-09-06
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 2012-12-03
  • 2012-04-21
相关资源
最近更新 更多