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