【问题标题】:how to replace "?" and "=" sign with "/" in URL - PHP htaccess如何替换“?”和“=”在 URL 中用“/”符号 - PHP htaccess
【发布时间】:2018-02-03 02:07:03
【问题描述】:

我正在开发运行 XAMPP localhost 和 PHP MYSQLI 的项目, 我的问题:我如何用“/”斜杠替换“?”,“=”符号。 ? 比如,我的网址是“archive?date=2017-06-02&p=4” 我想强制它“存档/2017-08-02/4”

我在 stackoverflow 和其他一些网站上发现了许多代码,但这些代码对我不起作用。 如果代码正常工作,那么 CSS 文件和 GET 方法在我的项目上不起​​作用。

.htaccess 的完整代码如下。

        Options +FollowSymlinks
    RewriteEngine on

    RewriteRule ^([^=]*)=([^=]*)=(.*) /$1/$2/$3 [N]
    RewriteRule ^([^=]*)=([^=]*)$ $1/$2 [L]


    RewriteRule ^home index.php [NC,L]
    RewriteRule ^archive archive.php [NC,L]
    RewriteRule ^about about.php [NC,L]
    RewriteRule ^article article.php [NC,L]
    RewriteRule ^news news.php [NC,L]
    RewriteRule ^video videos.php [NC,L]




    RewriteRule ^video?vid=([0-9]+) videos.php?q=$1 [NC,L]
    RewriteRule ^article?num=([0-9]+) article.php?num=$1 [NC,L]
    RewriteRule ^editorial?num=([0-9]+) editorial.php?num=$1 [NC,L]
    RewriteRule ^news?news=([0-9]+) news.php?news=$1 [NC,L]

【问题讨论】:

  • 通常是简单的重写规则(如果不是文件,重定向到索引)和路由系统
  • 会是这样的RewriteCond %{QUERY_STRING} "^date=([\d-]+)&p=(\d+)$"RewriteRule "^archive$" "/archive/%1/%2" [R,L]
  • 还没有工作:(
  • 它没有加载 CSS 和 JavaScript,也没有工作 GET 方法。

标签: .htaccess xampp


【解决方案1】:

您无法检查重写规则中的查询字符串。您需要为此重写条件:

RewriteCond %{QUERY_STRING} date=([^&]+)&p=(.+)
RewriteRule ^archive/? /archive/%1/%2?

在这里演示:http://htaccess.mwl.be?share=81e85c09-d505-5206-ab14-6c5059107808

如果您想实际重定向,只需将[R=301,L] 添加到RewriteRule 的末尾即可。

但是,看看上面的内容,我怀疑你的脚本在 /archive/index.php?data=foo&p=bar 上监听,但希望 URL 像 /archive/date/p,即漂亮。

当您第一次接触到 htaccess URL 重写时,这实际上是一个非常常见的误解。

RewriteRules 将为您屏蔽或重定向 URL,但它们无法更改脚本所在的基础位置,因此无法更改用于传递信息的地址。

换句话说 - 您可以将/archive/index.php?data=foo&p=bar 屏蔽为/archive/date/p,以便对/archive/date/p 的请求解析为/archive/index.php?data=foo&p=bar,但您无法做到这样,如果您输入/archive/index.php?data=foo&p=bar 作为URL,您将拥有该URL更改为 /archive/date/p,同时仍提供来自 /archive/date/p 的内容。它必须是或。

如果这一切听起来都对,我的建议如下:

首先,将您的代码放入不同的文件中,例如/archive/script.php

接下来将以下内容添加到您的 htaccess 中:

RewriteCond %{QUERY_STRING} date=([^&]+)&p=(.+)
RewriteRule ^archive/? /archive/%1/%2? [R=301,L]

RewriteRule ^archive/([^/]+)/([^/]+) /archive/script.php?date=$1&p=$2

请注意,前两行与以前相同,但现在有一个新行查找/archive/date/p 的屏蔽 URL 格式并将其发送到由新的 RewriteRule 处理的实际脚本。

新规则的行为在这里演示:http://htaccess.mwl.be?share=06751667-f16f-5c13-91eb-dd5cffdc6db3

希望这有意义/有帮助。

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 2013-09-06
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多