【问题标题】:.htaccess optimization.htaccess 优化
【发布时间】:2012-11-12 15:50:28
【问题描述】:

谁能帮助 .htaccess 优化? 其实我有下一个代码:

RewriteEngine on
RewriteBase /
DirectoryIndex frontend/www/index.php

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} cpanel/(.*)$
# Why not "-f" - because it's domain of 3d level: VirtualDocumentRoot /path/to/htdocs/%-3/ and if I use "-f" file not founds :(
RewriteCond backend/www/%1 -F
RewriteRule . backend/www/%1 [L]

RewriteCond %{REQUEST_URI} cpanel/(.*)$
RewriteCond backend/www/%1 !-F
RewriteRule . backend/www/index.php?b=%1 [L]

RewriteCond %{REQUEST_URI} !cpanel/(.*)$
RewriteCond frontend/www%{REQUEST_URI} -F
RewriteRule . frontend/www%{REQUEST_URI}

RewriteCond %{REQUEST_URI} !cpanel/(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . frontend/www/index.php?f=%{REQUEST_URI}

文件夹结构:

.
├── .htaccess (with code I provided)
├── frontend
│   ├── www
│       ├── css
│       │   ├── base.css
│       └── index.php
├── backend
    ├── www
        ├── css
        │   ├── base.css
        └── index.php

我需要:

  • my.domain.com/base.css 显示文件是否存在于根目录或 在前端/www
  • my.domain.com/dir/base.css 显示文件是否存在于 root/dir 目录或 frontend/www/dir 下
  • my.domain.com/cpanel/base.css 显示文件是否存在于后端/www 目录
  • my.domain.com/cpanel/dir/base.css 显示文件是否存在于 backend/www/dir 目录
  • 如果在任何 nedded 目录中找不到文件,我会从 frontend/www/index.php 或 backend/www/index.php 显示 index.php(如果 URI 以 cpanel/... 开头)。

看起来我的 .htaccess 工作得很好,但我不确定它的质量。

【问题讨论】:

  • 我认为您的规则还可以。唯一有问题/扩展性的部分是 -F 开关...但是您似乎有充分的理由使用它

标签: apache .htaccess mod-rewrite


【解决方案1】:

如果您的httpd.conf 设置正确,则此RewriteBase / 是不必要的

RewriteCond %{REQUEST_URI} cpanel/(.*)$ 部分cpanel/(.*)$ 应该是^cpanel/(.*)$。没有它,每个包含 '..cpanel/something..' 的 url 都会匹配。

我猜在...?f=%{REQUEST_URI} 中,您想将客户端请求的 url 传递给 index.php(可能是为了记录 404-s)。但是,如果REQUEST_URI 包含不需要的字符(例如&),则会导致意外行为,例如只有REQUEST_URI 中直到& 的部分将作为f 参数的值传递,& 之后的部分将是另一个新创建的GET 参数。 (请尝试一下。)

你可以用$_SERVER['REQUEST_URI']在php中得到(原始的)REQUEST_URI。如果你省略这部分,你的.htaccess会更清楚。

最后两条规则需要一个 [L] 标志,这并不重要,但是如果您不想链接您的规则,为了安全性和可维护性,添加 [L] 标志总是一个好主意。

我觉得你的 .htaccess 除了这些小东西没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多