今天我尝试创建.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/123(手动)和PHP脚本工作,
我将myparam值更改为abc而不是123:www.web.com/test/myparam/abc
然后它重定向到404找不到页面...(服务器不知道abc不是目录 when integer works
when string 404
)
!所以我想做什么:!
www.web.com/ test .php? inttParam = 1 &amp; strrParam = stringhere &amp; ; p = 1
至
www.web.com/test / inttParam / 1 / strrParam / stringhere / p / 1
当我使用$_GET['p']
时,它会起作用。
答案 0 :(得分:3)
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&amp; strrParam = stringhere&amp; inttParam = 1`:
RewriteRule "^(test)(?:\.php)?/([^/]+)/([^/]*)(/.*)?$" /$1.php$4?$2=$3 [NC,L,QSA]
答案 1 :(得分:0)
RewriteEngine on
# do not affect files
RewriteCond %{REQUEST_URI} !(\..{2,4})$
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ index.php?parameter1=$1&%1 [L]
也许是这样的东西?
答案 2 :(得分:0)
好的,我导航到www.web.com/test.php?myparam=123
没有重定向到www.web.com/test/myparam/123
我不知道这是否意味着你也想要从具有GET参数的那个到具有斜杠的那个重定向(大概是301)。
如果是这样,我建议使用anubhava的先前答案并使用PHP处理任何301重定向。实际上,你可以使用“R”标志重定向“RewriteRule”,但我承认我不知道如何解决这个特殊情况。
无论如何,我认为没有必要,除非带有GET参数的旧网址在搜索引擎优化中运作良好,并且你不会失去排名。