目前,文件扩展名.php
已从我的URL中正确删除。但这些URL在www.example.com/thema
下没有尾随斜杠,在www.example.com/thema/
下有尾随斜杠。
我的.htaccess
文件的内容:
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
# redirect file.php to /file/
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php\s [NC]
RewriteRule ^ /%1/ [R=302,NE,L]
# added .php extension to /file by checking presence of file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
</IfModule>
能否请您给予一些建议,我需要改变以下几点匹配:
- 域应在https下可用
- 主页应仅在
www.example.com
(w/o尾随斜杠)下可用 - 子页面应该仅在尾部带有斜杠(例如
www.example.com/thema/
)时才可用
1条答案
按热度按时间pw9qyyiw1#
在此规则中,您应该重定向到
https
,而不是http
。(此规则中存在http
将导致额外的重定向,因为第一个规则将重定向回https
。)然后,您可以在此之后添加另一条规则,以追加尾随的斜杠:
$0
反向引用包含来自RewriteRule
* 模式 * 的整个匹配(即整个URL路径,减去斜杠前缀)。主页应仅在www.example.com(w/o尾随斜杠)下可用
在URL路径的开头总是有一个斜杠(即主机名后立即)。您无法控制此操作但是,它是否显示在浏览器的地址栏中是另一回事-大多数浏览器省略了它,但这只是美观(同样的方式,浏览器倾向于从可见URL中省略
www.
子域和请求方案,即.http
和https
,甚至在某些情况下省略查询字符串)。有关详细信息,请参阅Webmasters SE site上的此问题:https://webmasters.stackexchange.com/questions/35643/is-trailing-slash-automagically-added-on-click-of-home-page-url-in-browser
这可能是一个问题,也可能不是一个问题,但如果包含
.php
扩展名的请求还包含查询字符串,则此规则将失败。要解决此问题并删除.php
扩展名,无论查询字符串是否存在,您可以执行以下操作:初始请求上的任何查询字符串都将保留。
(NB:这最终应该是一个301,一旦你确认它按预期工作。)
第一个 * 条件 *(
RewriteCond
指令)是多余的,应该被删除,除非你碰巧也有与.php
文件同名的目录 * baseline *,并且访问该目录应该优先?(这似乎不太可能,因为它也会使.php
文件从HTTP请求中无法访问。然而,为了最小化重定向的数量(这并不一定是一个问题),你需要重新排序指令,并在上面讨论的重定向中使用绝对URL。我还假设你没有实现HSTS。
举例来说:
我删除了
<IfModule>
Package 器,因为这里不需要(如果没有安装mod_rewrite,它只会用于 * 屏蔽 * 任何错误)。