gpt4 book ai didi

mod-rewrite - 通过我的 mod_write 避免重复的 url

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:47:01 25 4
gpt4 key购买 nike

目前,我有一个简单的 .htaccess 来整理我的页面 url,方法是将 .php 从末尾敲掉,或添加它,具体取决于您查看它的方式。

基本上,/about.php 将变成/about。

但是,这会导致我的页面可以通过这两个 url 访问。我可以接受它并使用 rel=canonical 标签,但我也想在我的 htaccess 中整理它。

除了手动指定每个 url 之外,是否有更好的方法(聪明的规则)将 .php 301 为无 .php 版本?

另外,我真的需要那些 rewritecond 规则吗?

<IfModule mod_rewrite.c>


RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ /$1.php [QSA,L]


ErrorDocument 404 /404


</IfModule>

最佳答案

在你原来的规则中,你只是说任何不是文件或目录的页面都必须重定向到相同的名称并附加 .php

因此,要“删除”对 .php 文件的访问权限,您需要做的是使用重定向来屏蔽它。因此,您将告诉客户端浏览器 foo/foo.php 实际上是 foo/foo

这将触发客户端对 foo/foo 的新请求。

然后您告诉服务器 foo/foo 实际上是 foo/foo.php。这将触发对 foo/foo.php 的内部请求。所以这里有一个循环。我们需要避免这种情况。我发现的最佳解决方法是检查 %{REDIRECT_URL} 是否为空。

最后的规则是:

# External redirection from real file to virtual with safe guard for internal redirection.
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REDIRECT_URL} !^$
RewriteRule ^(.*)\.php$ /$1 [QSA,R=301,L]

# Internal redirection to real file.
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ /$1.php [QSA,L]

不要忘记任何重写/重定向都会触发新请求!

参见:How does url rewrite works?

关于mod-rewrite - 通过我的 mod_write 避免重复的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com