RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L]
它应该采取任何URL为什么这不正确地重写URL?
mysite.com/someurl
并将其转换为
new.php?url=someurl
但是它一直打算只new.php
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L]
它应该采取任何URL为什么这不正确地重写URL?
mysite.com/someurl
并将其转换为
new.php?url=someurl
但是它一直打算只new.php
第一支承引用$1
不AFAIK。如果不这样做,请尝试指定[QSA],尽管我怀疑是否是这样。
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]
第一个后置引用应该是$ 1而不是$ 0。
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]
这也取决于你在文件中哪些代码等线路。如果你有另一个与它冲突的代码,也可能搞砸重写。
你需要躲避第二个问号在第一线,因此文字问号匹配:
RewriteCond %{REQUEST_URI} !^/?new.php\?url
也没有使用在第二行的括号的组。 $0
是好的,或者您可能想要$1
。如果您使用$0
,你可以把它简化一堆:
RewriteRule ^.*$ new.php?url=$0 [L]
还是在另一方面,如果你正在分崩离析的URL是有原因的,我建议一些修正。你没有完全正确地匹配文件名和扩展名。像这样稍微复杂的正则表达式可能会做你最好:
RewriteRule ^/?(.*?)(?:\.([^.]*))?$ new.php?path=$1&extension=$2 [L]
说明:
(.*?)
相匹配的目录和文件名。 ?
表示非贪婪匹配,所以一旦下一部分匹配就停下来。括号会导致它被捕获并存储在$1
中。
(?:\.([^.]*))?
符合文件扩展名。 ?:
圈数表示不捕获外部圆括号,因此点不在$2
中捕获。 ([^.]*)
与扩展名匹配并确保它不包含点。最后的?
使文件扩展名部分是可选的,只是不是所有的URL都有文件扩展名。因此,如果有文件扩展名,将只有一个$2
。
可能的重复:http://stackoverflow.com/questions/1616719/need-a-regex-to-match-url-without-http-https-ftp,http://stackoverflow.com/questions/1616770 /帮助改写 - 这-URL-简单但并非工作 – Gumbo 2009-10-24 08:02:02