Mod rewrite 为什么';这难道不能正确地重写url吗?

Mod 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

它应该接受任何URL

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]