【问题标题】:htaccess rewrite with conditionshtaccess 用条件重写
【发布时间】:2011-05-14 19:14:31
【问题描述】:

使用我的 htaccess 文件,我想要实现的是:

  • 所有不针对以下划线或命名为 admin 的子目录的请求都应重定向到 index.php
  • 所有属于 admin 子目录且不以下划线开头的请求都应重定向到 admin/index.php

示例:
http://www.example.com/controller/method -> http://www.example.com/index.php
http://www.example.com/_css/style.css -> 无重定向
http://www.example.com/admin/ -> 无重定向
http://www.example.com/admin/controller/method -> http://www.example.com/admin/index.php
http://www.example.com/admin/_js/script.js -> 无重定向

我有时让它部分工作,但它并不漂亮。

我认为这并不难,但我无法修改网络上列出的任何示例来处理这种情况。

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    这并不难,但请检查一下

    斜杠是怎么回事?你有它还是它总是被删除?

    RewriteRule ^admin/([^_].*)[^/]$ admin/index.php [L,QSA]
    RewriteRule ^([^_][^admin].*)/([^_].*)$  index.php[L,QSA]
    

    【讨论】:

    • 是的,它可能是斜杠。这就像我自己尽最大努力尝试时所做的那样,即使这看起来好多了。但是,当浏览器决定要添加尾随空格时,它会破坏下划线目录不再起作用
    • 那么很容易在 htacces 文件中添加规则,以便删除尾部斜线,您要添加斜线还是删除它?哪个代码效果更好,我认为它是我的,因为我从 anubhava 的其他代码中得到了一些奇怪的结果
    • 我不确定我想要什么。如果您阅读sebastians-pamphlets.com/…,他认为您应该强制使用斜杠。而是相反。老实说,我感到很失落。为什么 www.site.com/admin/.+/$ 不被接受,而 www.site.com/.+/$ 被接受?
    • 然后使用斜杠,这应该可以工作: RewriteRule ^admin/([^_].*)/$ admin/index.php [L,QSA] RewriteRule ^([^_] [^admin].*)/([^_].*)/$ index.php[L,QSA]
    • 我使用了你的代码,最后想出了以下有效的规则。 RewriteRule ^admin.*/(.+)$ admin/$1 [L,QSA], RewriteRule ^admin admin/index.php [L,QSA], RewriteRule ^[^]。 index.php [L,QSA]。感谢您的帮助
    【解决方案2】:

    我认为以下规则应该适合你:

    Options +FollowSymlinks -MultiViews
    RewriteEngine on
    
    RewriteCond %{REQUEST_URI} !^/*(_|admin/?) [NC]
    RewriteRule . index.php [L]
    
    RewriteCond %{REQUEST_URI} !^/*admin/($|index\.php|_) [NC]
    RewriteRule ^(admin/.+)$ admin/index.php?p=$1 [L,NC]
    

    【讨论】:

    • 谢谢。这就像我自己尽最大努力尝试时所做的那样,即使这看起来好多了。但是,当浏览器决定要添加尾随空格时,它会破坏下划线目录不再起作用
    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2011-10-02
    • 2016-12-14
    相关资源
    最近更新 更多