【问题标题】:Datalife Engine Rewrite URL Without ID没有 ID 的 Datalife 引擎重写 URL
【发布时间】:2013-05-05 23:56:14
【问题描述】:

我想改变rewrite url来移除id号,所以

site/2-post.html --> 通常
site/post.html --> 我想要的

有可能吗?我检查了模块 php 文件并在必要时更改了代码,但在 .htaccess 中无法设置。我的.htaccess 在这里我想当我改变它时有必要的部分发生了一些问题

RewriteRule ^([0-9]+)-([^/]*)\.html$ /index.php?newsid=$1&seourl=$2 [L]

【问题讨论】:

    标签: apache datalife-engine


    【解决方案1】:

    我认为您想要实现的目标是不可能的,因为应用程序需要知道 ID 才能执行任何有用的操作。如果浏览器请求的唯一内容是site/post.html,则服务器无法神奇地重新创建以前在 URL 中的 ID。

    唯一可行的方法是应用程序可以完全基于“seourl”参数查找文章,在这种情况下,您可以简单地从 URL 中删除“newsid”部分,留下如下规则:

    RewriteRule ^([^/]*)\.html$ /index.php?seourl=$1 [L]
    

    测试这是否可行的简单方法是在浏览器中键入规则将映射到的形式的 URL,例如http://yoursite.example.com/index.php?seourl=some-post-that-exists

    【讨论】:

    • IMSoP,感谢回复,但 seourl 参数仅更改 seo 类型与 url 构造无关,我也想创建没有 index.php 或其他参数(如 id)的 url 我认为没有办法创建这个 url 结构
    • 您不能创建不包含检索正确内容所需信息的 URL,因为 URL 是服务器获取的唯一输入。因此,您可以更改参数组合的方式,并删除始终相同的内容,例如 index.php,但在某些地方需要足够的信息才能实际选择正确的帖子。
    • 我明白你想说什么。那么使用 301 可以吗?
    • 我不确定您认为 301 会有什么帮助。如果 URL 中的信息太少,一个 301 不能神奇地添加它;如果您在 URL 中包含所有信息,那么告诉浏览器用较少的信息重试将没有用。您的网络服务器只能看到浏览器当前请求的 URL,因此不在该 URL 中的信息无处可存。
    • 有很多网站使用我想要的 URL,并且使用 301 可能是可能的,因为其他网站中给出的示例可以找到解决此问题的解决方案。所以没有必要用权威说话。谢谢。
    【解决方案2】:

    这个 hack 将 id 替换为 url 的结尾: 找到这个: 引擎/模块/show.short.php 引擎/模块/show.full.php

    找到 . $row['id'] 。 “-”。 $row['alt_name'] 。 ".html";

    替换为:。 $row['alt_name'] 。 “-”。 $row['id'] 。 ".html";

    将此代码放入 .htaccess 中

    RewriteRule ^(.*)-([0-9]+).html(/?)+$ index.php?newsid=$1&seourl=$2 [L]
    RewriteRule ^([^.]+)/(.*)-([0-9]+).html(/?)+
    $ index.php?newsid=$2&seourl=$3&seocat=$1 [L]
    

    【讨论】:

      【解决方案3】:

      在 DLe 8.x 中可以修改此选项,但在 9.x 和 10.x 中不走运,我完全同意 IMSoP,因为 DLE 使用 ID 库生成 seourl。

      【讨论】:

        猜你喜欢
        • 2011-11-04
        • 2013-11-14
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-28
        相关资源
        最近更新 更多