AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 656121
Accepted
imaginative
imaginative
Asked: 2015-01-04 14:37:45 +0800 CST2015-01-04 14:37:45 +0800 CST 2015-01-04 14:37:45 +0800 CST

mod_rewrite 将这两个规则合二为一

  • 772

我目前有两条规则可以正常运行,但我觉得它们可以合并为一条,以便维护更小的配置和更少的规则来处理每个 HTTP 请求。规则:

RewriteRule ^/user/[0-9]+/?$ /index.php [NC,QSA,L] 
RewriteRule ^/user/[0-9]+/(.*)$ /$1 [NC,QSA,L]

我必须添加第一个带有显式重定向的规则,/index.php因为例如,去http://www.example.com/user/5/会给我一个 HTTP 400。重写将在内部重写到/,但不是读取 DirectoryIndex,而是index.phperror_log 会给我:client denied by server configuration: /。

将显式重定向添加到/index.php诸如http://www.example.com/user/5/第二条规则之类的固定 URL 将适用于其他所有内容。

有没有办法将配置设置为正常使用DirectoryIndex我设置的而不是在这里明确列出 index.php?http://www.example.com没有重写规则就可以正常工作,所以我不完全确定为什么重写会破坏它。

apache-2.2
  • 1 1 个回答
  • 142 Views

1 个回答

  • Voted
  1. Best Answer
    Zimmi
    2015-01-04T15:46:01+08:002015-01-04T15:46:01+08:00

    您可以结合使用这 2 个规则。我认为这些规则位于 VHost 配置文件或另一个配置文件中,但不在 .htaccess 中,也不在 VHost 配置内的 Directory 部分中。这意味着您处于每个服务器上下文中。

    问题:

    在每个服务器上下文中,替换(重写的最后一部分)可以是文件系统路径或 URL。

    Apache 会尝试猜测您是指 URL 还是文件系统路径。RewriteRule 文档指出:

    仅当在服务器(虚拟主机)上下文中配置规则并且替换中路径的第一个组件存在于文件系统中时,替换才被视为文件系统路径

    因此,您的规则 nr 2 将以 /user/[0-9]/ 开头的所有内容重写为 /。现在您可以看到文件系统中存在路径 /(没有名称的路径)。但当然,您对该目录的访问权限受到限制,因此您拥有client denied.

    解决方案:

    删除第一条规则,使用 index.php 和

    使用PT 标志(直通):

    RewriteEngine On
    RewriteRule ^/user/[0-9]+/(.*)$ /$1 [NC,QSA,L,PT]
    

    或者在您的替换中更具体:

    RewriteEngine On
    RewriteRule ^/user/[0-9]+/(.*)$ /root/and/full/path/to/www/$1 [NC,QSA,L]
    

    希望这可以帮助!

    • 1

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve