使用htaccess只重写有效的url

时间:2013-02-05 07:53:14

标签: php apache .htaccess rewrite

现在我正在使用下面给出的正则表达式

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

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

我希望上面的规则不应该像love-wallpaper.php&anything一样重写错误的网址 但是应该重写为love-wallpaper.php?anythingwallpapers.php

之类的网址

如何做到这一点?

示例:
love-wallpaper.php#asdfasdfasdf这样的网址不应重写为wallpapers.php 但是love-wallpaper.php?aasdbfsbdf之类的网址应该重定向到wallpapers.php 感谢

2 个答案:

答案 0 :(得分:1)

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

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

&之后,它不会与#$wallpaper.php等匹配。如果你没有,你可以在正则表达式字符类[]中添加更多符号我希望他们匹配和重写,反之亦然。

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

答案 1 :(得分:1)

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

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

我还转义了-字符,因为它在正则表达式中保留。

regex / htaccess的解释:

  • ^ - “以”
  • 开头
  • (love|quotes) - 字符串“love”或字符串“quotes”
  • \-wallpaper\.php - 字符串“-wallpaper.php”,-.已转义。
  • $ - “结束必须在这里”
  • [QSA]将您的网址参数(url.php?my=parameter)发送到wallpapers.php页面。

您无法决定不匹配url.php#hash,因为网址哈希不能用于.htaccess匹配,因为它们永远不会发送到服务器 - 请参阅Redirect URL with hash using .htaccess file