【问题标题】:.htaccess rewrite all 'other' URLs.htaccess 重写所有“其他”URL
【发布时间】:2013-02-18 11:04:26
【问题描述】:

希望这是一个简单的。我有一个非常基本的.htaccess,它将对/admin(或/admin/etc)的任何请求重写为/_admin/index.php。到目前为止一切顺利:

#Options All -Indexes

RewriteEngine On
RewriteBase /admin

RewriteRule ^admin/$ /_admin/index.php [QSA]
RewriteRule ^admin$ /_admin/index.php [QSA]
RewriteRule ^admin/(.+)$ /_admin/index.php [QSA]

我还想要一个通用的“catch all else”规则,它将任何 other url(/users/turnips//some/other/path 等等)重写回/index.php

我似乎无法让它工作 - 它的 server error 500/admin 也会被重写到根页面。我确定我只需要对 RewriteCond 做点什么,但我想不通。

谢谢!

【问题讨论】:

  • 尝试在每个重写规则之前添加这个:RewriteCond %{REQUEST_URI} !index\.php [NC],以停止错误。
  • @faa 这似乎没有任何改变。只是为了澄清一下-我在那里列出的 .htaccess 文件确实可以正常工作。我只需要添加一个额外的规则,它将捕获不是/admin 的任何其他url:所以/users 和其他任何东西都将重写为站点根目录中的/index.php(而/admin/ 仍然指向@987654337 @)

标签: apache .htaccess mod-rewrite


【解决方案1】:

在其他规则之后添加它。如果不应用之前的规则,它将是默认规则。

RewriteBase /
RewriteCond %{REQUEST_URI} !index\.php [NC]
RewriteRule .*        index.php        [L,QSA]

【讨论】:

  • 这不也匹配其他文件,如图像等吗?
  • 是的,根据此匹配所有内容:...anything else... 在您的评论中。但是,你想重定向到根目录下的 index.php 什么?
  • 我没有问这个问题,我只是怀疑他/她想这样做
  • 我明白了。好吧,根据他的评论,这似乎就是 OP 想要的。但是,感谢您指出这一点。
  • 对于这样的条件似乎并不难:RewriteCond %{REQUEST_URI} !\.(jpg|css|png|whatever) [NC] 其中类型被排除在规则之外。
【解决方案2】:

首先,我建议您将 L 标志添加到您的重写中,这样您就可以确保在匹配重写后避免意外匹配(当然除非有意)。

其次,WordPress 使用以下代码重写所有不匹配 index.php 的 URL 或已存在的文件。这样直接访问的文件(如图像、文本文件、下载等)不会被重写。请注意,最初它还包含 RewriteCond %{REQUEST_FILENAME} !-d 行,也不会重写目录,但您似乎想要这种行为:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php - [L]

请看看这是否符合您的需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多