如何使用 mod 重写在 Apache 中重写此 URL?
How do I rewrite this URL in Apache using mod rewrite?
我正在尝试重定向
"/w/index.php?title=TITLE_HERE&oldid=100"
至
"/wiki/TITLE_HERE.php".
我尝试了几种方法,但根据我的研究,以下 RedirectMatch 应该有效。我读了很多关于在 Apache 中以不同方式重写的内容。当然,问题在于它不起作用。当我访问
时,我根本没有被重定向
"/w/index.php?title=Example_Article&oldid=100".
这就是我正在尝试的:
RedirectMatch "^/w/index\.php?title=([^&]+)" "/wiki/.php"
我还有很多其他有效的 redirect/rewrite 规则。我不明白为什么这个不起作用。
我试过使用和不使用引号。我还尝试在末尾添加“.*$”,以防需要完全匹配,但没有成功。
字符 class [^&] 表示任何不是“&”的字符的一个实例。然后我想要一个或多个带有“+”量词的(当然是贪婪匹配)。这应该使它删除“&oldid=100”并使事情顺利进行。但是重定向甚至没有触发。
我也尝试了“(.+)”来查看是否不支持取反的正则表达式字符 class,但也没有被重定向。
顺便说一句,我的站点不是 wiki。它曾经是。现在它是静态的 HTML。这就是为什么重定向是有益的。我知道您可以在 MediaWiki 中以不同方式重写 URL。
(这是我的第一个 Stack Overflow 问题,请耐心等待。)
将此添加到任何其他重写规则的顶部(在内部重定向 rewrite-rules 下方(没有标志 [R]
的规则)):
RewriteCond %{REQUEST_URI} ^\/w\/index\.php$
RewriteCond %{QUERY_STRING} (?:^|&)title=(.+)(?:&|$)
RewriteRule ^ /wiki/%1.php [R=302,L,NE]
如果你搞糊涂了,</code>和<code>%1
的区别是:%1
从RewriteCond
获取之前捕获的字符串,而</code>是就像通常的正则表达式 back-reference 一样,只包含当前 <code>RewriteRule
.
中的内容
这对我有用:
RewriteCond %{REQUEST_URI} ^/w/index\.php$
RewriteCond %{QUERY_STRING} (?:^|&)title=([^&]+)
RewriteRule ^ /wiki/%1.php [R=302,L,NE]
最后使用“(.+)(&|$)”对我不起作用。找不到页面,也没有重定向。
注意!在我添加“[R=302,L]”之前浏览器栏中的URL没有更新。现在它更新了。这里的解决方案将 index.php 的查询附加到问号后的 URL,因此它变成:
/wiki/Article_Name.php?title=Article_Name&oldid=100
这至少适用于使用我的设置显示网页。现在互联网上的死链接少了几百个,我想,如果我最后做对了的话。
我正在尝试重定向
"/w/index.php?title=TITLE_HERE&oldid=100"
至
"/wiki/TITLE_HERE.php".
我尝试了几种方法,但根据我的研究,以下 RedirectMatch 应该有效。我读了很多关于在 Apache 中以不同方式重写的内容。当然,问题在于它不起作用。当我访问
时,我根本没有被重定向"/w/index.php?title=Example_Article&oldid=100".
这就是我正在尝试的:
RedirectMatch "^/w/index\.php?title=([^&]+)" "/wiki/.php"
我还有很多其他有效的 redirect/rewrite 规则。我不明白为什么这个不起作用。
我试过使用和不使用引号。我还尝试在末尾添加“.*$”,以防需要完全匹配,但没有成功。
字符 class [^&] 表示任何不是“&”的字符的一个实例。然后我想要一个或多个带有“+”量词的(当然是贪婪匹配)。这应该使它删除“&oldid=100”并使事情顺利进行。但是重定向甚至没有触发。
我也尝试了“(.+)”来查看是否不支持取反的正则表达式字符 class,但也没有被重定向。
顺便说一句,我的站点不是 wiki。它曾经是。现在它是静态的 HTML。这就是为什么重定向是有益的。我知道您可以在 MediaWiki 中以不同方式重写 URL。
(这是我的第一个 Stack Overflow 问题,请耐心等待。)
将此添加到任何其他重写规则的顶部(在内部重定向 rewrite-rules 下方(没有标志 [R]
的规则)):
RewriteCond %{REQUEST_URI} ^\/w\/index\.php$
RewriteCond %{QUERY_STRING} (?:^|&)title=(.+)(?:&|$)
RewriteRule ^ /wiki/%1.php [R=302,L,NE]
如果你搞糊涂了,</code>和<code>%1
的区别是:%1
从RewriteCond
获取之前捕获的字符串,而</code>是就像通常的正则表达式 back-reference 一样,只包含当前 <code>RewriteRule
.
这对我有用:
RewriteCond %{REQUEST_URI} ^/w/index\.php$
RewriteCond %{QUERY_STRING} (?:^|&)title=([^&]+)
RewriteRule ^ /wiki/%1.php [R=302,L,NE]
最后使用“(.+)(&|$)”对我不起作用。找不到页面,也没有重定向。
注意!在我添加“[R=302,L]”之前浏览器栏中的URL没有更新。现在它更新了。这里的解决方案将 index.php 的查询附加到问号后的 URL,因此它变成:
/wiki/Article_Name.php?title=Article_Name&oldid=100
这至少适用于使用我的设置显示网页。现在互联网上的死链接少了几百个,我想,如果我最后做对了的话。