重写.htaccess URL变量重写

时间:2014-06-29 09:02:37

标签: .htaccess mod-rewrite

我目前使用:

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME}.php -f 
   RewriteRule ^(.+)$ $1.php [L,QSA]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME}.html -f 
   RewriteRule ^(.+)$ $1.html [L,QSA]

用于删除.php.html

但我想知道如何重写?[variableName]=[variable]

例如,目前发生了这种情况:

http://myurl.com/about.htmlhttp://myurl.com/about/

但是我怎么会重写变量,如:

http://myurl.com/foo/?bar=truehttp://myurl.com/foo/bar/true/

或者这不可能吗?

感谢您的帮助,我们也欢迎对目前的重写进行任何优化!

编辑:大家好,所以在zx的帮助下,我得到了这个:

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME}.php -f 
   RewriteRule ^(.+)$ $1.php [L,QSA]

   RewriteCond %{QUERY_STRING} ([^=]+)=([^=]+)
   RewriteRule ^/?$ %1/%2?  [L,R]

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME}.html -f
   RewriteRule ^(.+)$ $1.html [L,QSA]

我的链接如下:href="./?do=foo",返回时间为/?do=foo /do/foo/

以下是.htaccess代码的100%的pastebin,其中包含默认来自主机提供商的内容:click

1 个答案:

答案 0 :(得分:0)

我对我们走哪条路感到困惑,所以这里有两个选择。

选项1

用户输入的链接:something?do=foo

重写链接:do/foo

RewriteCond %{QUERY_STRING} ([^=]+)=([^=]+)
RewriteRule ^/?$ %1/%2?  [L,R]

选项2

用户输入的链接:foo/bar/true

重写链接:foo/bar=true

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1?$2=$3 [QSA,DPI,L,R]
  • ^锚点断言我们位于字符串的开头
  • 每个([^/]+)匹配路径片段并将其捕获到其中一个组
  • /?匹配可选的最终斜杠
  • $锚点断言我们位于字符串的末尾
  • $1?$2=$3使用群组捕获来重写网址
  • QSA附加任何预先存在的参数
  • DPI会丢弃任何路径片段
  • L告诉mod-rewrite在此之后停止检查规则