【问题标题】:URL rewrite for admin exclude directory管理员排除目录的 URL 重写
【发布时间】:2012-11-21 09:27:08
【问题描述】:

我有一个 URL 重写设置来创建漂亮的 URL

RewriteCond %{REQUEST_URI} !^\/*(index\.php|blog|admin\/assets|site\/assets|robots.txt|sitemap.xml|products.xml|favicon\.ico)
RewriteRule ^(.*)$ /index.php?rq=$1 [L,QSA]

当我使用/admin 访问管理区域时,URL 被重写为/admin/?rq=admin,因为我有一个名为“admin”的根级目录。这可能很简单,但我怎样才能编辑(或添加到)我的 .htaccess 规则,以便将 url 清楚地写为/admin/

更新: 澄清一下,我想使用 /index.php?rq=admin 访问 /admin 而不是调用 /admin/index.php

这是我的 apache 虚拟主机配置:

<VirtualHost *:80>
        ServerAdmin alex
        ServerName hub
        ServerAlias hub
        DocumentRoot /var/www/hub/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/hub>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

【问题讨论】:

    标签: .htaccess mod-rewrite rewrite


    【解决方案1】:

    只需将admin 文件夹添加到您的RewriteCond 的例外列表中即可。现在,您对admin/assets 有例外,因此您可以删除assets 部分并为整个admin 文件夹保留例外,如下所示:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^\/*(index\.php|blog|admin|site\/assets|robots.txt|sitemap.xml|products.xml|favicon\.ico)
    RewriteRule ^(.*)$ /index.php?rq=$1 [L,QSA]
    

    【讨论】:

    • 我刚刚添加了更多信息——我想做与你建议相反的事情——我想使用重写规则而不是管理目录来访问管理员。该系统目前可以正常工作 - 但我只需要删除 URL 的 ?rq=admin 部分。
    • @AlexHolsgrove 我很困惑。你有请求/admin - 你想通过调用index.php?rq=admin来处理它。但是:这实际上适用于您的设置!我不明白,你怎么得到/admin/?rq=admin?我没有看到创建此 URL 的规则???
    • 这就是我在这里发布它的原因:) 当我输入一个包含任何根级目录(如 /admin 或 /somedir)的 URL 时,它总是会重写 /somedir/?rq=somedir。另外,如果我在 /admin/ 或 /somedir/ 的末尾加上 /,那么我看不到额外的 ?rq=。奇怪!
    • @AlexHolsgrove 遍历所有父目录中的所有.htaccess 文件,并检查httpd.conf 和apache.conf 配置文件(尤其是Location 和Directory 部分)...那里必须更多mod_rewrite 配置,很可能RewriteRule 与[R] 或[R=30x] 开关
    • 我已经用我的 Apache vhost 配置更新了这个问题。我的根目录中只有一个 .htaccess。
    【解决方案2】:

    似乎在我的 .htaccess 中添加了 DirectorySlash Off 就可以了。不确定这是否是正确的解决方法,但它解决了我的特定问题。我必须确保完全清除缓存以防止缓存重定向(感谢卡米尔)

    在 Chrome 中:Chrome-&gt; Tools -&gt; Clear Browsing Data -&gt; Empty the Cache

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多