我正在研究运行XAMPP localhost和PHP MYSQLI的项目, 我的问题:我如何取代"?"," ="标志与" /"削减。 ? 比如,我的网址是"存档?date = 2017-06-02& p = 4" 我想强迫它" archive / 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]
答案 0 :(得分: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
倾听,但希望网址与/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
,但如果您输入{ {1}}作为网址,您仍然可以在/archive/index.php?data=foo&p=bar
提供内容时将网址更改为/archive/date/p
。它必须是或。
如果这听起来不错,我的建议如下:
首先,将您的代码放入另一个文件中,例如/archive/date/p
。
接下来将以下内容添加到您的htaccess:
/archive/script.php
请注意,前两行与之前相同,但现在有一个新行查找RewriteCond %{QUERY_STRING} date=([^&]+)&p=(.+)
RewriteRule ^archive/? /archive/%1/%2? [R=301,L]
RewriteRule ^archive/([^/]+)/([^/]+) /archive/script.php?date=$1&p=$2
的屏蔽URL格式并将其发送到实际脚本,该脚本由新脚本处理重写规则。
新规则的行为在此处进行了演示:http://htaccess.mwl.be?share=06751667-f16f-5c13-91eb-dd5cffdc6db3
希望这有意义/有帮助。