.htaccess写入规则以删除问号和等号



今天我试图创建.htaccess文件,用/替换?=
test.php代码:

<?php
echo $_GET['myparam'];
?>


.htaccess:
我使用了这个写规则:

RewriteEngine On
RewriteBase /
RewriteRule ^test/myparam/([0-9]+)/?$ test.php?myparam=$1 [NC,QSA,L]

好吧,我导航到了www.web.com/test.php?myparam=123
没有重定向到www.web.com/test/myparam/123
所以导航到:www.web.com/test/myparam/23(手动),php脚本就可以工作了,
我将myparam值改为abc,而不是123:www.web.com/test/myparam/abc
然后它重定向到404未找到的页面。。。(服务器不知道abc不是目录when integer workswhen string 404)


所以我想做的是:


www.web.com/test.phpinttParam=1&字符串参数=字符串&p=1

www.web.com/test/inttParam/1/strrParam/stringhere/p/1


并且当我使用$_GET['p']时,它将起作用。

i changed the myparam value to abc instead of 123 and it didn't work

当然不会起作用,因为您的规则最终只匹配数字:

RewriteRule ^test/myparam/([0-9]+)/?$ test.php?myparam=$1 [NC,QSA,L]

将你的规则更改为这个,使其适用于任何东西:

RewriteRule ^test/myparam/([^/]+)/?$ test.php?myparam=$1 [NC,QSA,L]

要使/test/inttParam/1/strrParam/stringhere/p/2转换为/test.php成为基于递归的通用规则?p=2&strrParam=stringhree&inttParam=1`:

RewriteRule "^(test)(?:.php)?/([^/]+)/([^/]*)(/.*)?$" /$1.php$4?$2=$3 [NC,L,QSA]
RewriteEngine on
# do not affect files
RewriteCond %{REQUEST_URI} !(..{2,4})$
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ index.php?parameter1=$1&%1 [L]

也许是这样的?

好吧,我导航到了www.web.com/test.php?myparam=123
没有重定向到www.web.com/test/myparam/123

我不知道这是否意味着你还想从带有GET params的重定向(大概是301)到带有斜杠的重定向。

如果是这样的话,我建议使用前面来自anubhava的答案,并使用PHP处理任何301重定向。实际上,您可以使用"R"标志使用"RewriteRule"进行重定向,但我承认我不知道如何解决这种特殊情况。

无论如何,我认为没有必要,除非带有GET参数的旧URL在SEO中运行良好,并且你不想失去排名。

最新更新