【问题标题】:Two regex rewrite rules to redirect 404 urls两个正则表达式重写规则来重定向 404 url
【发布时间】:2011-10-07 13:15:09
【问题描述】:

我有以下两个 url,它们给了我一些令人讨厌的 404 错误,我想通过向 apache 添加一些重写规则来解决这些错误,我必须认识到我对正则表达式的理解不足以编写正确的规则。

第一网址

http://www.example.com/fincas-rusticas/finca-rustica_en_alacant-alicante/lalacanti/alicante/function.strtotime

必须重定向到相同的 url,末尾没有 /function.strtotime。

第二个 URL,讨厌的一个。

http://www.example.com/casas/casas_en_malaga/malaga/malaga/
严格标准:只有变量应该通过引用在 /var/www/vhosts/eldeposit.com/httpdocs/protected/helpers/Search.php 在线传递1398
/casas/casas_en_malaga/malaga/malaga/venta-vivienda-29-473-24693-0-0

这个必须去掉有严格标准错误的部分。我不知道它是否可以用正则表达式完成,或者我最好用 php 编程

【问题讨论】:

  • 只删除最后一段就足够了吗?

标签: regex apache mod-rewrite redirect http-status-code-404


【解决方案1】:

1) 使用这条规则——它会从 URL 的末尾删除 function.strtotime(通过使用 301 永久重定向),无论该部分在 URL 中有多深(即它适用于 example.com/something/function.strtotime 和 @987654323 @)。

RewriteEngine On
RewriteBase /

RewriteRule ^(.*)function\.strtotime $1 [L,R=301]

2) 使用 .htaccess 无法解决此问题。这是您的 PHP 代码中的错误(听起来您直接传递了值,而不是先将其分配给变量并传递变量)并且必须在 PHP 代码中修复。

【讨论】:

  • 嗨 LazyOne 并感谢您的回答,第二点与 php 错误无关,您弄错了,问题是当页面上发生该错误时,它位于 HREF 属性内的链接,所以链接变成了那段丑陋的大文本,谷歌将其作为链接读取并开始索引它
  • 如您所见:REQUEST_URI=/pisos/piso_en_melenara/-/-/%3Cbr%20/%3E%3Cb%3EStrict%20Standards%3C/b%3E:%20%20Only% 20个变量%20should%20be%20passed%20by%20reference%20in%20%3Cb%3E/var/www/vhosts/example.com/httpdocs/protected/helpers/Search.php%3C/b%3E%20on%20line% 20%3Cb%3E1398%3C/b%3E%3Cbr%20/%3E/pisos/pisos_en_melenara/gran-canaria/palmas-las/venta-vivienda-35-459-36428-0-0
  • @Alexandru So .. 你建议如何解决这个问题。编写规则应该不是问题.. 但是由于我不知道您的应用程序以及正确的链接应该如何,所以我不知道从哪里开始。请准确描述您对解决此问题的想法。
  • 好吧,网址的坏部分以
    开头并以
    结尾,正确的网址应该是:/pisos/piso_en_melenara/-/-/pisos/pisos_en_melenara/gran-canaria /palmas-las/venta-vivienda-35-459-36428-0-0 所以我的意见是尝试在正则表达式变量 $1、$2 等中捕获字符串的所有部分,然后在重定向端放指教我们的,把无用的文字省略掉,我就是不知道怎么正确实现,上面粘贴的url是为空格编码的
【解决方案2】:

第一个你可以做

RewriteRule fincas-rusticas/finca-rustica_en_alacant-alicante/lalacanti/alicante/function.strtotime fincas-rusticas/finca-rustica_en_alacant-alicante/lalacanti/alicante/ [L]

对于第二个,我必须假设这个 URL 已经被重写了,因为严格的标准错误是 PHP 错误。这意味着您的地址在某处已处理。

如果URL应该被脚本处理为重定向到,我想你可以参考:Strict Standards: Only variables should be passed by reference

如果 URL 应该产生一个禁止的错误,你可以这样做

RewriteRule casas/casas_en_malaga/malaga/malaga/ - [F]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多