Mod rewrite 为什么';这难道不能正确地重写url吗?
它应该接受任何URLMod rewrite 为什么';这难道不能正确地重写url吗?,mod-rewrite,Mod Rewrite,它应该接受任何URL RewriteCond %{REQUEST_URI} !^/?new.php?url RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L] 并将其转换为 mysite.com/someurl 然而,它一直是新的。php第一个back引用是$1而不是$0AFAIK。如果这不起作用,请尝试指定[QSA],尽管我怀疑这是正确的 new.php?url=someurl 第一个反向引用应该是$1而不是$0。 RewriteCond %{R
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L]
并将其转换为
mysite.com/someurl
然而,它一直是新的。php第一个back引用是
$1
而不是$0
AFAIK。如果这不起作用,请尝试指定[QSA],尽管我怀疑这是正确的
new.php?url=someurl
第一个反向引用应该是$1而不是$0。
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]
它还取决于文件中的其他代码行。如果您有另一个与之冲突的代码,重写也可能会出错。您需要转义第一行中的第二个问号,以便它与文字问号匹配:
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]
此外,您没有在第二行使用括号内的组<代码>$0可以,或者您可能需要$1
。如果您使用$0
,您可以将其简化为一组:
RewriteCond %{REQUEST_URI} !^/?new.php\?url
或者从另一方面来说,如果你因为某种原因而破坏了URL,我会建议你进行一些修正。您没有完全正确地匹配文件名和扩展名。像这样稍微复杂一点的正则表达式可能会更好:
RewriteRule ^.*$ new.php?url=$0 [L]
说明:
(.*)
与目录和文件名匹配。?
表示不贪婪地匹配,所以下一部分匹配后立即停止。括号使其被捕获并存储在$1
中(?:\。([^.]*))?
与文件扩展名匹配?:
表示不捕获外部圆括号集,因此点不会在$2
中捕获([^.]*)
匹配扩展名并确保它不包含点。最后一个?
使文件扩展名部分成为可选部分,只是因为并非所有URL都有文件扩展名。因此,如果有文件扩展名,则只有$2
RewriteRule ^/?(.*?)(?:\.([^.]*))?$ new.php?path=$1&extension=$2 [L]