【问题标题】:.htaccess url rewrite existing directory.htaccess url 重写现有目录
【发布时间】:2015-11-30 14:15:36
【问题描述】:

我的 .htaccess 有问题

我使用以下重写规则:

RewriteRule ^/?([\w]+)$ /index.php?$1

RewriteRule ^/?([\w]+)/?([\w]+)$ /index.php?$1=$2

RewriteRule ^/?([\w]+)/?([\w]+)/?([\w]+)$ /index.php?$1=$2&$3

RewriteRule ^/?([\w]+)/?([\w]+)/?([\w]+)/?([\w]+)$ /index.php?$1=$2&$3=$4

例如URL domain.com/admin/login 调用 url domain.com/index.php?admin=login

这个功能很好,但是当我只请求 url domain.com/admin 时,服务器会将我重定向到 domain.com/admin/?admin,它只显示一个白页(我想访问 domain.com/index.php?admin

问题是,服务器上有一个名为 /admin 的目录(之前我曾将此目录命名为 /administration 但由于 cookie 问题我不得不将其重命名为 /admin

如果我使用 url domain.com/admin 是否有办法正确重定向到 domain.com/index.php?admin ?我必须在我的.htaccess 文件中更改什么?

我希望我能很好地解释这个问题,我是 .htaccess 的新手,所以我不是准确命名问题的专业人士......

谢谢!

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    答案是肯定的。忽略 .htacces 中的文件/文件夹时,您使用 RewriteCond 就像告诉浏览器跳过该文件夹/文件一样。 在你的情况下,你把它放在你的重写规则之上。

    RewriteCond %{REQUEST_URI} !^/admin
    

    这将忽略 admin 文件夹。您也可以将其用于

    之类的文件
    RewriteCond %{REQUEST_URI} !.*\.(php|txt|docx) 
    

    上面会跳过以.php.txt.docx结尾的文件

    【讨论】:

      【解决方案2】:

      重写文件需要关闭目录斜线。

      在您的 htaccess 中,将以下行置于“RewriteEngine on”指令上方

       DirectorySlash off
      

      然后您将能够将“admin”(不带斜杠)重写为“index.php”,带有斜杠的“admin/”将打开目录“admin”

      【讨论】:

      • 非常感谢,这解决了问题!但是现在 cookie 问题又出现了:如果不设置 setcookie() 的路径,登录脚本根本不起作用。使用像“/”这样的路径可以让我登录,但是当我注销时,cookie 不会被删除!?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2010-10-26
      • 2023-03-20
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多