如何更换"?"和" ="签署" /"在URL中 - PHP htaccess

时间:2017-08-25 04:14:44

标签: .htaccess xampp

我正在研究运行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]

1 个答案:

答案 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

希望这有意义/有帮助。