使用htaccess,是否可以将每个网址重写为一个页面?

时间:2015-01-27 07:13:20

标签: .htaccess mod-rewrite

这是我当前的.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上创建了一个无限重定向循环

我做错了什么?

1 个答案:

答案 0 :(得分:1)

这是因为/khp是一个真实的目录而mod_dirmod_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]