2009-10-24 67 views
0
RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L] 

它应该采取任何URL为什么这不正确地重写URL?

mysite.com/someurl 

并将其转换为

new.php?url=someurl 

但是它一直打算只new.php

+0

可能的重复: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

回答

0

第一支承引用$1不AFAIK。如果不这样做,请尝试指定[QSA],尽管我怀疑是否是这样。

RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L] 
0

第一个后置引用应该是$ 1而不是$ 0。

RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L] 

这也取决于你在文件中哪些代码等线路。如果你有另一个与它冲突的代码,也可能搞砸重写。

2

你需要躲避第二个问号在第一线,因此文字问号匹配:

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. (.*?)相匹配的目录和文件名。 ?表示非贪婪匹配,所以一旦下一部分匹配就停下来。括号会导致它被捕获并存储在$1中。

  2. (?:\.([^.]*))?符合文件扩展名。 ?:圈数表示不捕获外部圆括号,因此点不在$2中捕获。 ([^.]*)与扩展名匹配并确保它不包含点。最后的?使文件扩展名部分是可选的,只是不是所有的URL都有文件扩展名。因此,如果有文件扩展名,将只有一个$2