使用htaccess只重写有效的url



现在我正在使用下面给出的regex

RewriteRule ^(love-wallpaper.php|quotes-wallpaper.php)+ wallpapers.php

love-wallpaper.phpquotes-wallpaper.php重写为wallpapers.php

我希望以上规则不应该重写错误的url,如love-wallpaper.php&anything
但应该像love-wallpaper.php?anythingwallpapers.php 一样重写为url

如何做到这一点?

示例:
类似love-wallpaper.php#asdfasdfasdf的Url不应重写为wallpapers.php
但是类似love-wallpaper.php?aasdbfsbdf的url应该重定向到wallpapers.php
感谢

您可能正在寻找以下内容:

RewriteRule ^(love|quotes)-wallpaper.php$ wallpapers.php [QSA]

我还转义了-字符,因为它在regex中是保留的。

regex/htaccess的解释:

  • ^-"以"开头
  • (love|quotes)-字符串"爱"或字符串"引号"
  • -wallpaper.php-转义了包含-.的字符串"-wallpaper.php"
  • $-"结束必须在这里"
  • [QSA]将您的URL参数(url.php?my=parameter)发送到wallpapers.php页面

您不能决定不匹配url.php#hash,因为URL哈希不能在.htaccess匹配中使用,因为它们从未发送到服务器-请参阅使用.htacccess文件重定向带有哈希的URL

我不太清楚你在寻找什么,但如果你想在quotes-wallpaper.php之后匹配有效的查询字符串,请使用以下规则

RewriteRule ^(love-wallpaper.php|quotes-wallpaper.php)+(?![w&#$!()]+) wallpapers.php

wallpaper.php之后,它将不匹配&#$等。如果不希望它们匹配并重写,可以在正则表达式字符类[]中放入更多符号,反之亦然。

注意:这将完全忽略传入url中的任何查询字符串。

最新更新