使用 htaccess,是否可以将每个 url 重写到一页?

With htaccess, is it possible to rewrite every single url to one page?

这是我当前的 .htaccess 文件:

RewriteEngine on

RewriteCond %{REQUEST_URI} !=/khp/handler.php
RewriteRule (.*) /khp/handler.php?url= [L,QSA]

期望的结果是所有 urls,无论它们是否存在于服务器上,都在内部重写为 /khp/handler.php?url=,其中 是原始 url.

当前发生的情况是,当我转到 url 这是现有文件夹的名称时,它会执行以下操作:
请求 url:example.com/khp
重定向至:example.com/khp/?url=

理想情况下,它还会重定向以删除所有尾部斜杠(ALL,无论是现有目录,裸域名 example.com 等)。这是我的 htaccess 文件的前一次迭代,但我删除了它,因为它在 example.com/khp

上创建了一个无限重定向循环

我做错了什么?

发生这种情况是因为 /khp 是一个真实的目录,而 mod_dirmod_rewrite 之后运行并在重写的 URI 中添加了一个尾部斜杠。

要关闭此行为,请使用:

DirectorySlash Off

RewriteEngine On
RewriteBase /

# everything
RewriteCond %{REQUEST_URI} !=/khp/handler.php
RewriteRule (.*) /khp/handler.php?url= [L,QSA]

# add a trailing slash to directories via a rule
RewriteCond %{DOCUMENT_ROOT}/ -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302]