RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L]
它应该采取任何网址
mysite.com/someurl
并将其转换为
new.php?url=someurl
然而它仍然只是new.php
答案 0 :(得分:2)
您需要在第一行中转义第二个问号,以便它与文字问号匹配:
RewriteCond %{REQUEST_URI} !^/?new.php\?url
此外,您没有在第二行使用带括号的组。 $0
没问题,或者您可能需要$1
。如果你使用$0
,你可以简化它:
RewriteRule ^.*$ new.php?url=$0 [L]
或者另一方面,如果您因为某个原因而建议修改URL而拆分URL。您没有完全匹配文件名和扩展名。这样一个更复杂的正则表达式可能会让你更好:
RewriteRule ^/?(.*?)(?:\.([^.]*))?$ new.php?path=$1&extension=$2 [L]
说明:
(.*?)
匹配目录和文件名。 ?
表示非贪婪匹配,因此只要下一部分匹配就停止。括号使其被捕获并存储在$1
。
(?:\.([^.]*))?
与文件扩展名匹配。 ?:
转而表示不捕获外部括号集,因此$2
中未捕获点。 ([^.]*)
匹配扩展名并确保其不包含点。最终?
使文件扩展名部分成为可选,只是因为并非所有URL都有文件扩展名。因此,如果有文件扩展名,则只有$2
。
答案 1 :(得分:0)
第一个反向引用是$1
而非$0
AFAIK。如果不这样做,请尝试指定[QSA],但我怀疑是这样。
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]
答案 2 :(得分:0)
第一个后退参考应为$ 1而不是$ 0.
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]
它还取决于您在文件中的其他代码行。如果你有另一个与它冲突的代码,也可能搞乱重写。