【问题标题】:Rewrite URL and permanently redirect to new URL重写 URL 并永久重定向到新 URL
【发布时间】:2012-08-05 10:58:15
【问题描述】:

我刚刚花了 2 个小时浏览 Google 和 Stackoverflow 档案,看看能否找到我的问题的答案,而不是一无所获,我发现太多了!所以不幸的是,我不得不添加大量 301 重定向问题。对不起。并感谢您查看这个 ;)

基本上,我有一个希望简化 URL 的博客。目前 URL 如下所示:

http://tempertemper.net/post.php?s=2012-05-30-freeagent

我希望它们看起来像这样:

http://tempertemper.net/2012-05-30-freeagent

我尝试将 RewriteRule /(.*)$ /post.php?s=$1 添加到我的 .htaccess 文件中,但没有。

目前的完整文件如下所示:

<ifModule mod_rewrite.c>

DirectoryIndex index.php index.html

ErrorDocument 404 http://tempertemper.net/error.php

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.tempertemper\.net$
RewriteCond %{REQUEST_URI} !cron.php
RewriteRule ^(.*)$ http://tempertemper.net/$1 [R=301,L] 

</ifModule>

我尝试在重定向 www 的规范化位之后添加它。到非 www.:

重写规则 ^([a-zA-Z0-9_-]+)$ post.php?s=$1

它有点工作。然后我可以链接到http://tempertemper.net/2012-05-30-freeagent,但问题是,http://tempertemper.net/post.php?s=2012-05-30-freeagent 仍然存在。这很可能对 seo 不利,因为在搜索引擎看来,我想我会有重复的内容。我尝试将 [R=301] 放在新行的末尾,但它会停止新链接的工作。还尝试将 ,L 放在方括号中并将其从规范化命令中删除,但没有任何乐趣(L 代表最后一个命令,不是吗...?)。

基本上,我毕竟在其中生成或已经生成了 post.php?s= 的所有 URL 都永久重定向到没有 post.php?s= 的 URL,因此进入这些页面的任何链接已经是重定向,以后的任何链接都将直接指向新外观的 URL。

希望这是有道理的……

谢谢,

马丁 :)

【问题讨论】:

    标签: .htaccess redirect friendly-url


    【解决方案1】:

    Apache 实际上修复了本地路径 => 正确的完全限定名称(我最初的假设),但我看到您的文件实际上检查了错误的文件。使用您提供的文件,我认为这将用作文件内容:

    DirectoryIndex index.php index.html
    ErrorDocument 404 http://tempertemper.net/error.php
    
    RewriteEngine On
    # don't redirect post.php to itself
    RewriteCond %{REQUEST_URI} !post.php
    # don't redirect error.php to post.php 
    RewriteCond %{REQUEST_URI} !error.php
    RewriteRule ^(.*)$ "/post.php?$1" [R=301,L]
    

    【讨论】:

    • 嗨 Sylwester,我尝试添加它,但是当我加载网站时它会将我带到此页面:tempertemper.net/post.php?s=post.php 并给我错误消息“页面未正确重定向。Firefox 有检测到服务器正在以永远无法完成的方式重定向对该地址的请求。此问题有时可能是由禁用或拒绝接受 cookie 引起的。"
    • 这是因为 post.php 采用了重写规则并执行了无限循环。我重写了我的答案,并认为提供的代码将代替您的 .htaccess 文件。
    • 嗯……当我在tempertemper.net 输入任何网址(包括根目录)时,它会将我带到tempertemper.net/post.php。只是,奇怪的是,它去掉了 CSS。它还会在一页上显示所有帖子,我想这是有道理的。也许这就是我在规范化重定向旁边写它的方式?我尝试删除它,但同样的事情发生了……
    • 是的。您可以通过将 RewriteRule 从 ^(.*)$ 更改为与日期模式匹配的内容(例如 ^/([0-9]{4}-[0-9]{2}-[0-9 ]{2}-.*)$ 然后您也可以删除 RewriteCond。但是您的所有网址都需要以日期开头。或者您只需添加静态网址作为更多 RewriteConds
    • 我实际上也打算从 URL 中删除日期,但认为在第一阶段之后会更好地解决这个问题。似乎不是这样,也许我应该一次性完成!我可以通过 CMS 控制面板从 URL 中删除日期(默认情况下它在那里,以确保每个帖子都有一个唯一的 URL)。所以说 URL 是,使用前面的示例,tempertemper.net/post.php?s=freeagent 我将如何制作它http://tempertemper.net/freeagent
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多