.htaccess url重写现有目录

时间:2015-11-30 14:15:37

标签: php .htaccess mod-rewrite

我的.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的目录(之前我曾用这个目录/管理命名,但由于cookie问题,我不得不将其重命名为/admin

如果我使用url domain.com/admin我可以正确地重定向到domain.com/index.php?admin吗?我需要在.htaccess文件中更改哪些内容?

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

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要关闭目录斜杠才能重写文件。

将以下行放在" RewriteEngine on"你的htaccess指令

 DirectorySlash off

然后你就可以重写" admin" (没有斜杠)到" index.php" ," admin /"使用斜杠将打开目录" admin"

答案 1 :(得分:1)

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

RewriteCond %{REQUEST_URI} !^/admin

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

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

以上内容将跳过以.php.txt.docx

结尾的文件