重写.htaccess URL变量重写
我目前使用:重写.htaccess URL变量重写,.htaccess,mod-rewrite,.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 Rewr
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.html 到http://myurl.com/about/
但我如何重写变量,例如:
http://myurl.com/foo/?bar=true 到http://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 not/do/foo/
这是一个100%的.htaccess代码的粘贴库,其中包括主机提供程序默认的内容:我不知道我们要走哪条路,所以这里有两个选项 选择1 用户输入的链接:something?do=foo 重写链接:do/foo 选择2 用户输入的链接:foo/bar/true 重写链接:foo/bar=true ^锚点断言我们位于字符串的开头 每个[^/]+匹配一个路径片段并将其捕获到其中一个组 /? 匹配可选的最终斜杠 $anchor断言我们在字符串的末尾 $1?$2=$3使用组捕获重写url QSA附加任何预先存在的参数 DPI丢弃任何路径片段 我告诉mod rewrite在这之后停止检查规则
@Sumurai8的可能重复-尽管你已经将这个问题标记为重复,但他们似乎理解regex。他们写答案和解释答案的方式对我毫无帮助。这就是为什么我创造了这个。。。希望得到一个基本的、体面的答案。如果你问一个与正则表达式相关的问题,你应该对正则表达式有一个基本的了解。如果你不知道,那就去了解一下正则表达式。mod_rewrite中使用的正则表达式类似于PCRE和PHP使用的内容。@Sumurai8你说得对!我一直逐字逐句地读问题谢谢你指出这一点,我会再看一眼。很明显,我有相反的。。。已更新规则,请重试:不,正好相反。。。我把它调换了,因为@Sumurai8告诉我它是反向的!href=./?do=foo给出404:这是一个痛苦,啊哈,好吧,看看选项1。
RewriteCond %{QUERY_STRING} ([^=]+)=([^=]+)
RewriteRule ^/?$ %1/%2? [L,R]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1?$2=$3 [QSA,DPI,L,R]