.htaccess writerule删除问号和等号

时间:2014-01-05 19:12:25

标签: php regex apache .htaccess mod-rewrite

今天我尝试创建.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']时,它会起作用。

3 个答案:

答案 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参数的旧网址在搜索引擎优化中运作良好,并且你不会失去排名。