这是我当前的.htaccess
文件:
RewriteEngine on
RewriteCond %{REQUEST_URI} !=/khp/handler.php
RewriteRule (.*) /khp/handler.php?url=$1 [L,QSA]
所需的结果是所有网址,无论它们是否存在于服务器上,都要在内部重写为/khp/handler.php?url=$1
,其中$1
是原始网址。
当前发生的事情是当我转到一个现有文件夹名称的网址时,它会这样做:
请求的网址:example.com/khp
重定向到:example.com/khp/?url=
理想情况下,它还会重定向以删除所有尾部斜杠( ALL ,无论现有目录,裸域名example.com
等)。这是我的htaccess文件的前一次迭代,但我删除了它,因为它在example.com/khp
上创建了一个无限重定向循环
我做错了什么?
答案 0 :(得分:1)
这是因为/khp
是一个真实的目录而mod_dir
在mod_rewrite
之后运行,并在重写的URI中添加一个尾部斜杠。
要关闭此行为,请使用:
DirectorySlash Off
RewriteEngine On
RewriteBase /
# everything
RewriteCond %{REQUEST_URI} !=/khp/handler.php
RewriteRule (.*) /khp/handler.php?url=$1 [L,QSA]
# add a trailing slash to directories via a rule
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302]