【问题标题】:Two rewrite rules in .htaccess files prevents me from accessing index file.htaccess 文件中的两个重写规则阻止我访问索引文件
【发布时间】:2013-03-02 06:05:21
【问题描述】:

这是我现有的 .htaccess 文件:

 RewriteEngine On

 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-l
 RewriteCond {REQUEST_FILENAME} !^images

 RewriteRule ^files(.+)$ ../../fileManager/server/php/files/$1 [L]
 RewriteRule ^(.+)$ subpage.php?url=$1 [QSA,L]

我会尽力解释这一点,但不会使其过于复杂。最终归结为:

如果 URL 在根 URL 之后立即包含“/files”(即:http://www.someurl.com/files/username/myFile.jpg),那么它应该将用户定向到特定 URL(在本例中:../../fileManager/server/php /files/$1).

使用第二条规则,如果 URL 在根 URL 之后包含除“/files”以外的任何内容,它会将它们定向到“subpage.php”。 (即:http://www.someurl.com/aboutme

这两个都可以正常工作。然而,有了这两个规则,我永远无法访问 / 或 /index.php(根 URL:http://www.someurl.com)。我不断被重定向到 subpage.php。

但是等等!还有更多!

如果我删除第一条 RewriteRule 行:

 RewriteRule ^files(.+)$ ../../fileManager/server/php/files/$1 [L]

...然后第二个重写规则按我的意愿工作,如果我转到 / 或 /index.php,它会将我带到那里,但如果我转到任何其他 URL,它会将我引导到子页面.php。

所以我不明白的是:为什么里面有两个 RewriteRule,我无法访问 index.php,但只有第二个 RewriteRule,我可以?

另外,有人可以就我如何解决这个问题提供任何建议吗?

任何信息将不胜感激!提前致谢!

【问题讨论】:

    标签: .htaccess mod-rewrite redirect


    【解决方案1】:

    RewriteConds 仅适用于下一个 RewriteRule。两者都在那里,RewriteConds 仅适用于第一个。

    只有第二个 RewriteRule 和第一个被删除,测试 index.php 是一个文件会阻止规则应用。

    两者都存在,第二条规则适用于所有内容,无论是否有文件。

    您似乎也想为第二条规则重复 RewriteConds。

    【讨论】:

    • 作为后续问题 - 当我将文件上传到我的服务器时,我使用的相对路径不起作用,尽管它在本地工作。如果我将其更改为完整的文件路径,它确实可以工作,但是,URL 也会更改 - 这是我不想要的。上传后有什么方法可以让我的相对路径正常工作吗?
    • 可能值得一个单独的问题,但看看RewriteBase directive
    猜你喜欢
    • 2021-06-19
    • 2013-10-05
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    相关资源
    最近更新 更多