【问题标题】:How can I change my site URL with htaccess?如何使用 htaccess 更改我的站点 URL?
【发布时间】:2021-10-17 23:40:11
【问题描述】:

这是我的网址:

http://localhost/blog/post/?meta=How-We-Build-Your-Website

我需要它是这样的:

http://localhost/blog/How-We-Build-Your-Website

我该如何使用.htaccess

【问题讨论】:

  • /blog/post/?meta=How-We-Build-Your-Website - 这不是最终端点 - 实际处理请求的“文件”是什么?也许是/blog/post/index.php
  • 是的,它的 index.php

标签: apache .htaccess mod-rewrite


【解决方案1】:

要在内部将友好 URL /blog/How-We-Build-Your-Website 的请求重写为 /blog/post/index.php?meta=How-We-Build-Your-Website(实际处理请求的基础文件),您可以在 .htaccess 中使用 mod_rewrite 执行类似以下操作:

RewriteEngine On

RewriteRule ^blog/([^w-]+)$ blog/post/index.php?meta=$1 [QSA,L]

子模式([^w-]+) 捕获/blog/ 之后的URL 路径部分并将其存储在$1 反向引用中,稍后将其用作替换中的meta URL 参数值em> 字符串(第二个参数)。正则表达式字符类[^w-] 匹配a-zA-Z0-9_(下划线)和-(连字符)范围内的字符,涵盖了您的示例。

QSA 标志还将附加初始请求中的任何查询字符串。如果您不希望初始请求中出现查询字符串,则应删除此标志。

为了澄清,您仍然需要将 HTML 源代码中的 URL 实际更改为规范/友好的 URL。 IE。 /blog/How-We-Build-Your-Website.

请注意,如果您在 .htaccess 中有其他指令,那么顺序可能很重要。

参考:

【讨论】:

    【解决方案2】:

    我很确定这样做的唯一方法是在 PHP 中重定向它。

    您可以通过编辑 post.php 文件并将其放在文件的 顶部 来做到这一点:

    <?php if (isset($_GET['meta'])) { header("Location: ../".$_GET['meta']); exit; } ?>
    

    这会重定向到页面而不加载任何其他页面数据。如果没有 "?meta=..." 但它不会重定向,而是加载页面的其余部分。

    【讨论】:

    • 您不能在 PHP 中执行此操作。 (这个问题被/被错误地标记了。)
    • 这会导致 404 错误我正在使用 URL 中的元数据从数据库中加载数据您的解决方案只会使 URL 可读但会破坏内容,有没有其他方法可以使 url 更清晰并显示数据?
    • 试试@MrWhite 的回答。
    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多