使用 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_dir
在 mod_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]
这是我当前的 .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_dir
在 mod_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]