我目前使用:
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
/do/foo/
。
以下是.htaccess代码的100%的pastebin,其中包含默认来自主机提供商的内容:click
答案 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在此之后停止检查规则