.htaccess “如何替换?”&引用;及=&引用;用“签名”/&引用;在URL中-PHPHHTAccess

.htaccess “如何替换?”&引用;及=&引用;用“签名”/&引用;在URL中-PHPHHTAccess,.htaccess,xampp,.htaccess,Xampp,我正在做一个运行XAMPP localhost和PHP MYSQLI的项目, 我的问题:如何用“/”斜杠替换“?”、“=”符号? 比如,我的url是“存档?日期=2017-06-02&p=4” 我想强制它“存档/2017-08-02/4” 我在stackoverflow和其他一些网站上发现了许多代码,但这些代码对我来说并不适用。 若代码正常工作,那个么CSS文件和GET方法在我的项目中就不起作用了 下面给出了.htaccess的完整代码 Options +FollowSymlin

我正在做一个运行XAMPP localhost和PHP MYSQLI的项目, 我的问题:如何用“/”斜杠替换“?”、“=”符号? 比如,我的url是“存档?日期=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=([^&]+)&p=(.+)
RewriteRule ^archive/? /archive/%1/%2?
此处演示:

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

然而,综上所述,我怀疑您的脚本正在收听
/archive/index.php?data=foo&p=bar
,但希望URL像
/archive/date/p
,即漂亮

这实际上是一个非常常见的误解,当您第一次使用htaccessurl重写时,它是如何工作的

重写规则将为您屏蔽或重定向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
请注意,前两行与以前相同,但现在有一行新行查找被屏蔽的URL格式
/archive/date/p
,并将其发送到实际脚本,该脚本由新的重写规则处理

这里演示了新规则的行为:


希望这是有意义的/有帮助的。

这通常是一个简单的重写规则(如果不是文件,则重定向到索引)和一个路由系统。它将像这样
RewriteCond%{QUERY\u STRING}“^date=([\d-]+)&p=(\d+)”
↲ <代码>重写规则“^archive$”/archive/%1/%2”[R,L]
尚未工作:(它没有加载CSS和JavaScripts,GET方法也不工作。