.htaccess:删除“/index.php”后的所有内容

.htaccess:删除“/index.php”后的所有内容

我花了几个小时寻找优化 URL 的终极方法,以便它们不会破坏页面及其结构。

我首先需要一种方法来删除 URL 末尾的斜杠 - 解决了!website.com/index.php/曾经是一个问题,但是现在/URL 末尾的斜杠已经消失了,无论如何!

然后我发现目录本身也会导致问题。所以我不得不想办法把类似的东西变成website.com/page/////website.com/page/没有多余的斜线。解决了!

现在,我跳到下一个问题。在后面放一些东西website.com/index.php会引起问题。例如:website.com/index.php/index.php或者website.com/index.php/abc不会让你404 错误但您仍会停留在当前页面,所有 URL(样式表和脚本)都已损坏。这……不太好。

我实际上发现了一些类似的问题,但它们都没有真正帮助我解决这个问题。任何帮助都将不胜感激!

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=302]

RewriteCond %{THE_REQUEST} //
RewriteRule ^.*$ $0 [R=302,L,NE]

答案1

后面放一些东西example.com/index.php会导致问题。例如:example.com/index.php/index.phpexample.com/index.php/abc不会抛出 404 错误

/<something>文件后面出现的,如上例中的/index.php(duplicated) 和 ,/abc称为附加路径名信息(路径信息)。默认情况下,是否允许(即提供 404)取决于文件处理程序。PHP 允许路径信息。

但是,您可以覆盖此功能并禁用所有文件类型的路径信息:

AcceptPathInfo Off

现在,URL 路径上出现的任何路径信息都将触发 404。顺便说一句,这还可以处理example.com/index.php/您之前提到的、用 mod_rewrite 处理的形式的请求。

...所有 URL(样式表和脚本)都损坏了。

这是因为您使用的是客户端资源的相对 URL 路径。重写 URL 时,相对 URL 总是可能出现问题。有关此问题的更多信息,请参见此处:

https://webmasters.stackexchange.com/questions/86450/htaccess-rewrite-url-leads-to-missing-css

RewriteCond %{THE_REQUEST} //
RewriteRule ^.*$ $0 [R=302,L,NE]

这并不完全正确,因为我可以(恶意)在查询字符串中添加多个斜杠并将请求发送到重定向循环。

为了避免在查询字符串中匹配多个斜杠,你可以更改条件模式从简单//\s[^?]*//+(虽然我觉得一定有更有效的正则表达式?)

相关内容