斜杠后作为参数的URL中的文本

时间:2018-06-09 23:11:44

标签: php .htaccess

我想创建htaccess规则来转换此网址: 的 www.foo.com/?val=hello 至: 的 www.foo.com/hello

我创建了新规则,但它无效。

RewriteRule ^([a-zA-Z0-9]+|)/?$ index.php?s=$1 [QSA]

任何想法如何做到这一点?谢谢!

1 个答案:

答案 0 :(得分:0)

我在我的Apache上做了这个:

  • 设置index.phtml。它在httpd.conf中定义为DirectoryIndex。
  • 设置hello.phtml
  • 在我的httpd.conf中,在相应的VirtualHost中,我添加了这个:

    RewriteEngine on
    RewriteCond %{QUERY_STRING} "val=(.+)"
    RewriteRule "(.*)"  "%1?"    [L,R=302]
    
  • 如果我要求http://localhost/?var=hello.phtml,我会被重定向到http://localhost/hello.phtml

详细说明:

  • RewriteEngine on:打开重写引擎。请记住加载重写模块(LoadModule rewrite_module modules/mod_rewrite.so
  • RewriteCond:变量%{QUERY_STRING} 包含Apache ?之后收到的所有内容。我将其与val=(.+)相匹配。 .匹配任何内容,+表示“前面的一个或多个”。前面的这里是.,因此任何字符组合都是有效的。它放在括号中,因为我稍后需要匹配的组。
  • RewriteRule:"(.*)"匹配http://localhost/之后的任何内容。它由%1替换,其中包含上面RewriteCond括号中的内容。然后我添加了?以确保没有添加查询字符串。

关于?的注释。默认情况下,如果您从.../somepage.html?var1=value1重写为.../somepage2.html,则重写引擎会在其末尾自动添加?var1=value1。要在不保留查询字符串的情况下重写,请在末尾添加一个?

  • L:如果您以后有其他规则,这表示如果它匹配则最后一个要考虑的规则。
  • R = 302。在这里我返回302,暂时移动。如果您希望重定向是永久性的,请将R = 301。