我正在构建一个 ajax 驱动的网站,该网站使用 html5 pushState() 来保留其 url 结构并促进可靠的页面重新加载等。为此,我设置了我的 htaccess,以使任何以大写字母开头的目录路径并且没有尾部斜杠被重定向到一些
“domain.com/index.php?page=目录路径”
所以现在我的请求被翻译为:
domain.com/文件夹 => domain.com/index.php?page=文件夹
domain.com/Folder/ , domain.com/folder, domain.com/folder/ => (默认,不重写)
这是由我的 .htaccess 文件(位于域根目录)完成的,代码如下:
# Enable Rewriting
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^((/?[A-Z][A-Za-z0-9]*)+[^/])$
RewriteRule ^((/?[A-Z][A-Za-z0-9]*)+[^/])$ index.php?page=$1
在我添加一个名为“Folder”的空白目录并在我的浏览器上访问“domain.com/Folder”之前,这一直很好。
以前,“domain.com/Folder”给了我预期的内容(“domain.com/index.php?page=Folder”)和“domain.com/Folder/”给了我一个 404 错误,正如预期的那样在文档根目录中没有名为“文件夹”的目录。
现在我的预期结果是:
浏览器在 url 栏中显示“domain.com/Folder”,服务器提供“domain.com/index.php?page=Folder”的内容(与“Folder”不存在的情况相同) )
但相反:
浏览器显示“domain.com/Folder?page=Folder”
有人可以指出我在这里做错了什么吗?而且,如果可能的话,我该如何纠正它?
*我在任何其他目录中都没有其他 htaccess 文件。
编辑:当我强制永久重定向 [R=301] 时,该方案似乎工作正常,但不幸的是,这会更改浏览器地址栏中的 url。